.Net 4 WPF DataGrid的ItemsSource - 以编程方式工作,但不以声明方式工作

时间:2013-02-05 22:19:22

标签: .net xaml mvvm wpfdatagrid

我正在使用C#编写WPF程序并以.Net 4.0为目标。我试图遵循MVVM模式,我的视图(代码隐藏)具有最小到无代码。

我想要使用List<MyRecord>在GUI中显示DataGrid。在我的XAML中,我有以下内容:

<DataGrid x:Name="RecordGrid" ...>
   <DataGrid.Columns>
      <DataGridTextColumn Binding="{Binding RecId}" Header="Record ID"/>
      <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
   </DataGrid.Columns>
</DataGrid>

剩下的就是将这个网格绑定到数据集合。

当我在代码隐藏文件中绑定它时,它可以正常工作:

RecordGrid.ItemsSource = MyRecordList;

但是,我更愿意在XAML中以声明方式绑定它。所以我尝试了这个:

<DataGrid x:Name="RecordGrid" ItemsSource="{Binding MyRecordList}" ...>

但它默默无效。加载数据网格时没有XAML绑定错误消息。我在MyRecordList的get方法上设置了断点,只要以声明方式定义ItemsSource,就不会调用它。

如何让我的数据网格从MyRecordList通过XAML?

1 个答案:

答案 0 :(得分:0)

如果希望绑定工作,则需要设置DataContext ... MVVM模式具有View和ViewModel。 查看是您的用户界面 - 例如窗口(我们称之为MainWindow)和 ViewModel 是你拥有RecordGrid属性和所有其他命令/属性(让我们调用类MainWindowViewModel)的地方

您需要同时连接它们,这可以通过在视图中指定DataContext是谁(在我们的例子中是MainWindowViewModel类)来完成。

所以你要在View的构造函数中做这样的事情:

    public MainWindow()
    {
        this.DataContext = new MainWindowViewModel();
        InitializeComponent();