C# 可观察收集<;ViewModel>;儿童(删除自我)
我有一个简单的viewmodels的observablecollection,它为特定视图提供了自包含的逻辑。在视图中,我有一个删除选项,该选项当前调用父数据以刷新/重新加载 所以——我不太喜欢通过构造函数传递父数据上下文,我需要一个最佳实践答案。如何正确地删除此项,并相应地更新父项?我是否可以将INotifyPropertyChanged挂接到整个视图,并以这种方式删除父视图C# 可观察收集<;ViewModel>;儿童(删除自我),c#,mvvm,viewmodel,observablecollection,C#,Mvvm,Viewmodel,Observablecollection,我有一个简单的viewmodels的observablecollection,它为特定视图提供了自包含的逻辑。在视图中,我有一个删除选项,该选项当前调用父数据以刷新/重新加载 所以——我不太喜欢通过构造函数传递父数据上下文,我需要一个最佳实践答案。如何正确地删除此项,并相应地更新父项?我是否可以将INotifyPropertyChanged挂接到整个视图,并以这种方式删除父视图 我有一个简单的viewmodels的observablecollection,它为特定视图提供了自包含的逻辑 规则:v
因此,您有一个连接到视图的ViewModel。此ViewModel保存一个ObservableCollection。集合有一个Remove(obj)方法。因此,您需要标识调用Delete的元素,并将其从集合中删除。当您调用RaisePropertyChanged()时,集合将更新您的视图。如果您有收听ViewModel的显示部分(模式=双向)。如果您删除了整个集合,您可以调用Clear()。您似乎试图打破ChildViewModels与ParentViewModel之间的依赖关系。您可以通过引入一个接口来实现这一点,该接口将抽象ChildViewModel需要执行的操作。然后,ChildViewModel将依赖于接口,父级将实现它。例如:
interface IOwner
{
void Delete(ChildViewModel vm);
}
class ChildViewModel
{
private IOwner owner;
public ChildViewModel(IOwner owner)
{
this.owner = owner;
}
public Delete()
{
owner.Delete(this);
}
}
class ParentViewModel:IOwner
{
public Delete(ChildViewModel child)
{
//deletion logic
}
}
interface IOwner
{
IList<ChildViewModel> Children {get;}
}
您可以根据自己的需要和偏好,以不同的方式为IOOwner建模,例如:
interface IOwner
{
void Delete(ChildViewModel vm);
}
class ChildViewModel
{
private IOwner owner;
public ChildViewModel(IOwner owner)
{
this.owner = owner;
}
public Delete()
{
owner.Delete(this);
}
}
class ParentViewModel:IOwner
{
public Delete(ChildViewModel child)
{
//deletion logic
}
}
interface IOwner
{
IList<ChildViewModel> Children {get;}
}
接口所有者
{
IList子项{get;}
}
显示一些代码,这样我们就可以看到您已有的代码。