如何从WPF中的子视图更改父视图属性?
答
子视图模型没有关于默认父知识。您可以在创建时向孩子注入对父母的引用,例如
public MethodInParent()
{
var child = new ChildViewModel(this);
}
或者您可以使用信使或事件聚合器以松散耦合的方式在孩子和父母之间发送消息或事件。有关此概念的更多信息,请参阅以下链接:https://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate-between-view-models/。
+0
请注意,ChildViewModel不应将整个父视图模型作为参数,因为这是一种不好的做法。子视图模型必须知道父视图模型,只需知道它需要什么,仅此而已。 'ChildViewModel'的构造函数可以在父视图模型中实现一些接口。 – Maxim
事件对此很好,或者您可以在父视图中创建静态操作方法。或者如果你想获得真正的技术,你可以创建一个消息总线。 –
我在这种情况下使用以下两种方法之一:1)在子视图模型中触发事件并在父级虚拟机中订阅此事件2)使用所需方法创建一个接口,在父级虚拟机中实现它,并将父级虚拟机上的引用传递给子级vm通过这个接口。如果嵌套级别大于1,我更喜欢第二种方法。 – Maxim