我目前正在做一个项目,我主要专注于后端,我知道这个XAML代码不是很好的做法。我真的不习惯INotifyPropertyChanged接口,我真的很难看到错误。当我调试程序时,TourName不是空的,它从www.example.com获取值liveTourAppointment.tour.name;但是当我运行它时,窗口中的Label保持为空
下面是我的尝试:
XAML代码:
<Grid>
<Label x:Name ="Label" Content="{Binding Path=TourName}" Margin="82,44,579,354"/>
</Grid>
</Window>
后面的代码在这里:
public partial class LiveTourWin : Window, INotifyPropertyChanged
{
public TourAppointment liveTourAppointment { get; set; }
private string _tourName =".";
public string TourName
{
get { return _tourName; }
set
{
{
if (value != _tourName)
{
_tourName = value;
OnPropertyChanged(nameof(TourName));
}
}
}
}
private readonly TourAppointmentController _tourAppointmentController;
public LiveTourWin(int guideId)
{
InitializeComponent();
this.DataContext = this;
_tourAppointmentController = new TourAppointmentController();
liveTourAppointment = _tourAppointmentController.GetLiveTour(guideId);
this.TourName = liveTourAppointment.tour.name;
}
protected virtual void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler? PropertyChanged;
}
}
1条答案
按热度按时间nafvub8i1#
您的绑定已找到。您遇到的问题是边距。您正在进行一些绝对设置。请尽量不要这样做。“窗口”中的每个对象(如网格对象)都会占用全部可用空间。就像浏览器一样。您可以调整窗口大小,并且通常会自动调整列等。
要做到这一点,在窗口中分配空间并自动调整以允许收缩/扩展。现在,如何做到这一点。
此外,您可以分配一个最小大小PLUS“”,以允许基于可用的拉伸,如下图所示。这有3列。第一列固定为120像素,但其余两列有预定义的最小值,但由于“”在两者上,它们可以根据可用的拉伸或收缩。因此,假设窗口是800宽。第一列仍然是120,第二个和第三个分别得到200和350,总共是670,剩下130。由于两列有“*”,因此每列将获得额外的宽度65。这同样适用于行定义。
还有其他类型的控件,StackPanels,DockPanels等,允许其他格式和对齐选项。
所以,你的绑定工作,但如果你给予它一个指定的位置,是预先分配的空间,因为你将最终准备你的用户界面,使什么适合你,而不是担心“固定”的利润等。
另外注意,对于标签,因为它们通常是预先生成的,所以您可能需要在绑定子句中添加以下内容