ObservableCollection <viewmodel> Children(删除自我)</viewmodel>

时间:2015-02-15 23:03:17

标签: c# mvvm viewmodel observablecollection

我有一个简单的observable收集视图模型,它具有该特定视图的自包含逻辑。在视图中我有一个删除选项,它当前调用父数据来刷新/重新加载。

所以 - 我不是通过构造函数传递父数据上下文的忠实粉丝,需要一个最佳实践答案。如何正确删除它,并相应地更新父更新?我可以将INotifyPropertyChanged挂钩到整个视图并让父移除吗?

2 个答案:

答案 0 :(得分:0)

  1. 我有一个简单的observable收集视图模型,它具有针对该特定视图的自包含逻辑。
  2. 规则:视图模型不知道正在使用它的特定视图。

    1. 在视图中我有一个删除选项,它当前调用父数据来刷新/重新加载。
    2. 所以你有一个连接到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;}
}
相关问题