我正在使用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?
答案 0 :(得分:0)
如果希望绑定工作,则需要设置DataContext ...
MVVM模式具有View和ViewModel。 查看是您的用户界面 - 例如窗口(我们称之为MainWindow)和 ViewModel 是你拥有RecordGrid
属性和所有其他命令/属性(让我们调用类MainWindowViewModel)的地方
您需要同时连接它们,这可以通过在视图中指定DataContext
是谁(在我们的例子中是MainWindowViewModel类)来完成。
所以你要在View的构造函数中做这样的事情:
public MainWindow()
{
this.DataContext = new MainWindowViewModel();
InitializeComponent();