Xaml中的WPF绑定
本文关键字:绑定 WPF 中的 Xaml | 更新日期: 2023-09-27 18:05:33
类似的问题很多,我就是不知道是怎么回事。
我是短总线努力得到我的ListView填充,被绑定到一个ObservableCollection…
代码:<controls:MetroWindow
...blah...
Title="MainWindow" x:Name="Main" DataContext="{Binding ElementName=Main}"
<ListBox Grid.Row="0" x:Name="FileNames" HorizontalAlignment="Left" Height="221" Margin="10,62,0,0" VerticalAlignment="Top" Width="258"
SelectionChanged="FileNames_SelectionChanged" BorderThickness="2"
ItemsSource="{Binding Reports, UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label CacheMode="{Binding Path=FileName,UpdateSourceTrigger=PropertyChanged}"></Label>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
//Code Behind
public ObservableCollection<ReportsModel> Reports { get; set; }
Reports = setReports();
ReportsModel impls INotifyPropertyChanged
public sealed class ReportsModel : INotifyPropertyChanged
我可以介入并看到报告得到填充良好,文件名字段也在每个报告上填充,但没有显示在我的列表框中。
包含名为Reports
的ObservableCollection<ReportsModel>
的引用不能有普通的getter/setter。您需要在Main
类上实现INotifyPropertyChange
,并更改Reports以发出像这样的属性更改信号
private ObservableCollection<ReportsModel> _reports;
public ObservableCollection<ReportsModel> Reports
{
get { return _reports; }
set
{
_reports = value;
PropertyChanged("Reports");
}
}
ReportsModel impls INotifyPropertyChanged
持有的数据与集合的属性Reports
绑定更改通知无关。
您应该使用PropertyChanged
周围的所有内容来增强代码。这意味着:
Main应该实现INotifyPropertyChanged
当源更改时通知UI,例如
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Reports"));
}
修改题目后编辑:为了避免出现问题,Reports值应该按以下方式获取/st:
private ObservableCollection<ReportsModel> _Reports;
public ObservableCollection<ReportsModel> Reports
{
get { return _Reports; }
set
{
_Reports = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Reports"));
}
}
}
我猜Main
也必须实现INotifyPropertyChanged
。