我有一个viewmodel对象,现在我们称之为MyVM。它包含一个名为AllDataObjects的数据对象列表(假设它的类型是MyData,它有一个List<MyEntry>属性ListOfEntries),并有一个属性CurrentSelection从它的列表中返回当前选定的数据对象。
负责更改选定项的机制工作,并将不同的MyData对象从AllDataObjects分配给CurrentSelection属性。
现在我有了一个DevExpress GridControl,它需要一个引用MyVM.CurrentSelection.ListOfEntries的DataBinding。但是,如果我对此进行设置,绑定将始终指向分配的第一个元素,因为当CurrentSelection分配了一个新的MyData对象实例时,绑定仍然只知道对旧对象的引用。
有没有一种方法可以将网格绑定到这个嵌套属性,而不必一次又一次地重置和重新初始化存储在CurrentSelecton中的相同MyData实例?
发布于 2016-05-19 17:25:00
我设法做到了这一点,方法是让MyVM实现接口INotifyPropertyChanged,并让持有我的网格的UserControl侦听它的PropertyChanged事件。
public class MyVMClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(String propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public List<MyData> AllDataObjects { get; set; }
private MyData CurrentSelection_ { get; set; }
public MyData CurrentSelection
{
get { return CurrentSelection_; }
set
{
CurrentSelection_ = value;
OnPropertyChanged(nameof(CurrentSelection));
}
}
public MyVM(List<MyData> allDataObjects)
{
AllDataObjects = allDataObjects;
}
}在UserControl的代码中:
public void Initialize(MyVMClass myVM)
{
MyVM = myVM;
MyVM.PropertyChanged += MyVM_PropertyChanged;
MyVM_PropertyChanged();
}
private void MyVM_PropertyChanged(object sender=null, PropertyChangedEventArgs e=null)
{
if (e == null || e.PropertyName == nameof(MyVMClass.CurrentSelection))
{
MyBindingSource.DataSource = MyVM.CurrentSelection.ListOfEntries;
}
}https://stackoverflow.com/questions/37316566
复制相似问题