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

我可以介入并看到报告得到填充良好,文件名字段也在每个报告上填充,但没有显示在我的列表框中。

Xaml中的WPF绑定

包含名为ReportsObservableCollection<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