我有一个简单的observable收集视图模型,它具有该特定视图的自包含逻辑。在视图中我有一个删除选项,它当前调用父数据来刷新/重新加载。
所以 - 我不是通过构造函数传递父数据上下文的忠实粉丝,需要一个最佳实践答案。如何正确删除它,并相应地更新父更新?我可以将INotifyPropertyChanged挂钩到整个视图并让父移除吗?
答案 0 :(得分:0)
规则:视图模型不知道正在使用它的特定视图。
所以你有一个连接到View的ViewModel。此ViewModel包含ObservableCollection。集合具有Remove(obj)方法。所以你要确定删除被调用的元素并将其从集合中删除。当你调用RaisePropertyChanged()时,Collection将更新你的View。如果你有监听ViewModel的显示部分(Mode = TwoWay)。如果删除整个集合,你可以调用它上面的Clear()。
答案 1 :(得分:0)
您似乎试图从ParentViewModel中断ChildViewModel的依赖关系。您可以通过引入一个接口来实现这一点,该接口将抽象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
}
}
您可以根据自己的需求和偏好以不同的方式为IOwner建模,其他示例:
interface IOwner
{
IList<ChildViewModel> Children {get;}
}