在由多个视图模型组成的多方面程序中,通常需要在主视图模型中执行特定函数来自其他后代视图模型的主视图模型。考虑一个场景,其中主视图模型管理内容呈现器中的内容显示,并且需要从子视图模型手动更新此显示。
弥合此通信差距,考虑合并委托对象。这些委托本质上建立了一条返回父视图模型的路径,提供了一种“引发事件”的方法,指示需要调用某个方法。
调用特定的方法父视图模型中的方法,使用以下委托语法:
public delegate void ReadyForUpdate();
在子视图中模型:
// Define a handler for the ReadyForUpdate delegate public void ParameterViewModel_OnParameterChange(string parameter) { // Here, we call the desired method UpdateDisplay(); }
在父视图模型中:
// Attach the handler to the delegate public ReadyForUpdate OnReadyForUpdate { get; set; } // When the delegate's event is raised (e.g., by the child calling UpdateDisplay()), // this method will be executed public void ChildViewModel_OnReadyForUpdate() { // Desired action occurs here (e.g., updating the display) }
如果合适,另一种方法是直接从子视图绑定到父视图模型,如下图所示:
<!-- In TreeViewView --> <Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
这预设父视图模型的实例是设置为主窗口的 DataContext。
以上是如何在 WPF 中从子视图模型调用主视图模型函数?的详细内容。更多信息请关注PHP中文网其他相关文章!