我有一个viewmodel对象,我们现在称之为MyVM
。它包含一个数据对象列表(让我们说类型为MyData
,它有一个List<MyEntry>
属性ListOfEntries
),名为AllDataObjects
并且具有属性{{1将当前选定的数据对象从其列表中返回。
负责更改所选项目的机制可以使用,并将CurrentSelection
对象从MyData
分配给AllDataObjects
属性。
现在我有一个需要CurrentSelection
引用GridControl
的DevExpress DataBinding
。但是,如果我设置它,绑定将始终指向第一个分配的元素,因为当MyVM.CurrentSelection.ListOfEntries
获得分配的新CurrentSelection
对象实例时,绑定仍然只知道对旧对象的引用。
有没有办法如何将我的网格绑定到这个嵌套属性,而不必重复和重新初始化MyData
一遍又一遍地存储在MyData
中的同一个{1}}实例?
答案 0 :(得分:0)
我设法通过让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;
}
}