此
delegate方法和链接的答案中使用的方法可以在任何父子关系中使用,也可以在任何方向上使用。这包括从子视图模型到父视图模型,子Window代码背后的代码Window,甚至是不涉及任何UI的纯数据关系。您可以delegate从MSDN上的“
委托(C#编程指南)”页面中找到有关使用对象的更多信息。
我刚刚在今天早些时候回答了类似的问题。如果您查看viewmodels之间的Passing参数,您将看到答案涉及到使用
delegate对象。您可以简单地将这些
delegates(从答案中)替换为您的方法,并且将以相同的方式工作。
请让我知道,如果你有任何问题。
更新>>>
是的,很抱歉,我完全忘记了您想要调用方法,但是…今晚我一直在撰写过多的文章。因此,仍然使用另一篇文章中的示例,只需在
ParameterViewModel_OnParameterChange处理程序中调用您的方法即可:
public void ParameterViewModel_onParameterChange(string parameter){ // Call your method here}可以将其
delegate视为返回父视图模型的路径……这就像引发一个名为的事件
ReadyForYouToCallMethodNow.。实际上,您甚至不需要输入参数。您可以这样定义
delegate:
public delegate void ReadyForUpdate();public ReadyForUpdate onReadyForUpdate { get; set; }然后在父视图模型中(在像另一个示例一样附加处理程序之后):
public void ChildViewModel_onReadyForUpdate(){ // Call your method here UpdateDisplay();}由于您有多个子视图模型,因此可以
delegate在它们都可以访问的另一个类中定义。如果您还有其他问题,请告诉我。
更新2 >>>
再次阅读您的最新评论后,我想到了一种更简单的方法,该方法 可以
实现您想要的…至少,如果我正确理解您的话。您可以
Bind直接从子视图到父视图模型。例如,这将允许你
Bind一个
Button.Command在子视图的财产
ICommand在你的父视图模型属性:
在
TreeViewView:
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />当然,这是假设相关父视图模型的实例设置为
DataContext的
MainWindow。



