子View Model调用主ViewModel中的函数
在涉及多个具有层级关系的View Model的场景中,可能需要从子视图模型中调用主视图模型中的函数。本文正是解决了这一需求,提供了一个利用委托对象的解决方案。
考虑所描述的场景。主窗口视图模型控制子视图中显示的内容。任务是通过从子视图模型调用主窗口视图模型中的函数来手动更新显示。
使用委托对象
采用的委托方法方法解决方案和参考文章中允许在任何亲子场景下进行沟通。可以从子视图模型到父视图模型、从窗口代码隐藏到子窗口代码隐藏、甚至数据关系之间进行访问。
实现
在父视图中定义委托模型:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
在子视图模型中,将处理程序附加到委托:
public void ReadyForUpdateHandler() { // Call the desired method in the parent view model }
在父视图模型中,调用该方法时适当的:
public void ChildViewModel_OnReadyForUpdate() { // Call your method here UpdateDisplay(); }
替代方法
在某些情况下,更简单的方法可能就足够了。从子视图到父视图模型的直接绑定允许直接访问父视图模型中的 ICommand 属性:
<!-- In a child view --> <Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
此方法假设父视图模型实例设置为主窗口的 DataContext。
以上是子视图模型如何调用父视图模型中的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!