我已经创建了WPF MVVM应用程序,并将WPFToolkit DataGrid绑定到DataTable,所以我想知道如何实现DataTable属性来通知更改。目前我的代码如下所示。
public DataTable Test
{
get { return this.testTable; }
set
{
...
...
base.OnPropertyChanged("Test");
}
}
public void X()
{
this.Test.Add(...); // I suppose this line will call to getter first (this.Test = get Test) and then it will call add letter, this mean that setter scope will never fire.
base.OnPropertyChanged("Test"); // my solution is here :) but I hope it has better ways.
}
这个问题是否有其他解决方案?
答案 0 :(得分:1)
您的表格数据有两种变化方式:可以从集合中添加/删除元素,也可以更改元素中的某些属性。
第一种情况很容易处理:将您的收藏设为ObservableCollection<T>
。在您的表格上调用.Add(T item)
或.Remove(item)
会向您发送更改通知到View(并且表格会相应更新)
第二种情况是你需要你的T对象来实现INotifyPropertyChanged ......
最终你的代码应该是这样的:
public class MyViewModel
{
public ObservableCollection<MyObject> MyData { get; set; }
}
public class MyObject : INotifyPropertyChanged
{
public MyObject()
{
}
private string _status;
public string Status
{
get { return _status; }
set
{
if (_status != value)
{
_status = value;
RaisePropertyChanged("Status"); // Pass the name of the changed Property here
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
}
现在将View的datacontext设置为ViewModel的一个实例,并绑定到集合,如:
<tk:DataGrid
ItemsSource="{Binding Path=MyData}"
... />
希望这会有所帮助:) 伊恩