我一直在尝试用新的DataTable替换DataGrid控件自动生成的整个表。
之前我查看了this question,但我一直在努力避免在我的viewmodel类中引用UI元素(或者将代码添加到Mainwindow.xaml.cs作为最后的手段)。
首先,我将DataGrid的ItemsSource绑定到我的Viewmodel中的DataView属性:
<DataGrid Grid.Row="1" Grid.Column ="1" ItemsSource="{Binding DisplayView}"/>
private DataView displayView;
public DataView DisplayView
{
get { return displayView; }
set { displayView = value; }
}
我还有一个方法可以将SQL表格式化为适当的DataTable,然后我将其分配给绑定到网格的DataView。
DisplayView = dtCloned.DefaultView;
当我在构造函数中调用此方法时,表会填满执行。
在运行时调用它会以相同的格式创建一个新表,但将其分配给DataView属性不会重新加载DataGrid以显示新表;我哪里错了?
答案 0 :(得分:1)
要使绑定知道后面属性的任何更新,必须在viewmodel / model上实现INotifyPropertyChanged接口。
执行此操作后,您的代码应如下所示:
public class YourViewModel : INotifyPropertyChanged
{
...
public event PropertyChangedEventHandler PropertyChanged;
private DataView displayView;
public DataView DisplayView
{
get { return displayView; }
set
{
displayView = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(nameof(DisplayView)));
}
}
}
...
}
有关界面的更多信息here。