使用MVVM将数据绑定到WPF中的ListView控件

时间:2012-01-11 11:31:11

标签: c# wpf mvvm

我试图将数据绑定到ListView控件:

<ListView Margin="8" Height="400" Width="650" 
    ItemsSource="{Binding Path=MyData}">
    <ListView.View>
         <GridView>
             <GridViewColumn Header="ID" Width="Auto" 
                  DisplayMemberBinding="Binding Path=ID}" >
             </GridViewColumn>
             <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" 
                  Header="Name" Width="100"/>
             <GridViewColumn DisplayMemberBinding="{Binding Path=Price}" 
                  Header="Price" Width="100"/>
             <GridViewColumn DisplayMemberBinding="{Binding Path=Author}" 
                  Header="Author" Width="100"/>
             <GridViewColumn DisplayMemberBinding="{Binding Path=Catalog}" 
                  Header="Catalog" Width="100"/>
           </GridView>
    </ListView.View>
</ListView>

  ObservableCollection<TableInfo> _MyData
  public ObservableCollection<TableInfo> MyData{ get; set; }

但是,它不会在窗口中显示任何内容,但MyDataObservableCollection。如何绑定数据?

3 个答案:

答案 0 :(得分:4)

丹娘,

如果您正确设置了视图模型,并且确定MyData集合不为null或为空,请尝试从xaml中删除“Path”关键字:

<ListView Margin="8" Height="400" Width="650" 
    ItemsSource="{Binding Path=MyData}">
    <ListView.View>
         <GridView>
             <GridViewColumn Header="ID" Width="Auto" 
                  DisplayMemberBinding="{Binding ID}" >
             </GridViewColumn>
             <GridViewColumn DisplayMemberBinding="{Binding Name}" 
                  Header="Name" Width="100"/>
             <GridViewColumn DisplayMemberBinding="{Binding Price}" 
                  Header="Price" Width="100"/>
             <GridViewColumn DisplayMemberBinding="{Binding Author}" 
                  Header="Author" Width="100"/>
             <GridViewColumn DisplayMemberBinding="{Binding Catalog}" 
                  Header="Catalog" Width="100"/>
           </GridView>
    </ListView.View>
</ListView>

如果这没有帮助,请检查调试输出并发布它,我们肯定会想出办法。

答案 1 :(得分:2)

你的XAML看起来很好。

确保正确设置DataContext

yourView.DataContext = YouViewModel;

答案 2 :(得分:0)

首次评估Binding时,它可能(取决于您的代码)找到null。如果您以后将其设置为合理的话,则不会收到通知。

尝试确保在类costructor中创建ObservableCollection,而不是在其他地方覆盖它。您可以替代地实现INotifyPropertyChanged并在te My set setter上引发PropertyChanged事件。