如何从子视图模型执行父视图模型中的函数
您的应用程序由一个 TreeView、两个 contentPresenter 和单独的视图组成每个 UI 元素的模型,包括主窗口。要更新显示,您需要从 TreeViewViewModel 调用 MainWindowViewModel 中的方法。
与类似情况一样,可行的解决方案涉及利用委托对象。查看之前题为“在视图模型之间传递参数”的论坛回复,以获取深入的解释和实际实现。只需将示例中的委托替换为所需的方法,它们的功能类似。
更新
直接调用方法不要传递参数,请考虑下面修改后的委托处理程序:
public void ParameterViewModel_OnParameterChange(string parameter) { // Call your method here }
此委托充当到父级的路径视图模型,启用类似事件的功能(“ReadyForYouToCallMethodNow”)。或者,您可以定义不带任何输入参数的委托:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
在父视图模型中,如上例所示附加处理程序后,您可以调用方法:
public void ChildViewModel_OnReadyForUpdate() { // Call your method here UpdateDisplay(); }
如果涉及多个子视图模型,您可以在所有子视图模型都可以访问的单独类中定义委托
更新 2
经过进一步分析,更简单的方法可能就足够了。您可以直接将子视图元素绑定到父视图模型中的属性。例如,TreeViewView 中的以下代码片段将 Button.Command 属性绑定到 MainWindowViewModel 中的 ICommand 属性:
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
这假设父视图模型实例设置为 MainWindow 的 DataContext。
以上是如何在 WPF 中从子视图模型调用父视图模型函数?的详细内容。更多信息请关注PHP中文网其他相关文章!