Eri*_*ark 9 c# wpf mvvm viewmodel
我的节目由一个TreeView和两个contentPresenters地面组成.mainWindow,TreeView和每个contentPresenter都有自己的viewModels.
我想调用一个函数在mainWindowViewModel从TreeViewViewModel.
我需要这样做,因为mainWindowViewModel控件显示的内容contentPresenters,我想手动更新显示.
我猜我会做这样的事......
TreeViewViewModel:
public class TreeViewViewModel
{
//Do I need to declare the MainWindowVM?
public TreeViewViewModel() { ... }
private void function()
{
//Command that affects display
//Manually call function in MainWindowVM to refresh View
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过使用来访问MainWindowVM来自TreeViewViewModel:
public MainWindowViewModel ViewModel { get { return DataContext as MainWindowViewModel; } }
Run Code Online (Sandbox Code Playgroud)
但它没有多大意义.因为MWVM不是DataContext的TreeViewViewModel.
She*_*dan 11
delegate此中使用的方法和链接的答案可用于任何父子关系和任一方向.这包括从子视图模型到父视图模型,子Window代码背后的代码Window,甚至不涉及任何UI的纯数据关系.您可以在MSDN上delegate的Delegates(C#编程指南)页面中找到有关使用对象的更多信息.
我今天早些时候刚刚回答了类似的问题.如果你看一下viewmodels post 之间的Passing参数,你会看到答案涉及使用delegate对象.您可以简单地delegate用您的方法替换这些(从答案中),它将以相同的方式工作.
请让我知道,如果你有任何问题.
更新>>>
是的,对不起,我完全忘了你想打电话给方法......我今晚一直在做太多的帖子.所以仍然使用其他帖子中的示例,只需在ParameterViewModel_OnParameterChange处理程序中调用您的方法:
public void ParameterViewModel_OnParameterChange(string parameter)
{
// Call your method here
}
Run Code Online (Sandbox Code Playgroud)
把它delegate看作是你回到父视图模型的路径......就像提出一个名为的事件ReadyForYouToCallMethodNow.实际上,你甚至不需要输入参数.你可以这样定义delegate:
public delegate void ReadyForUpdate();
public ReadyForUpdate OnReadyForUpdate { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后在父视图模型中(在附加处理程序之后,如在另一个示例中):
public void ChildViewModel_OnReadyForUpdate()
{
// Call your method here
UpdateDisplay();
}
Run Code Online (Sandbox Code Playgroud)
由于您有多个子视图模型,因此可以delegate在另一个可以访问的类中定义它们.如果您还有其他问题,请与我们联系.
更新2 >>>
在再次阅读你的最后一条评论之后,我想到了一个更简单的方法,可以实现你想要的......至少,如果我理解你的话.您可以Bind直接从子视图到父视图模型.例如,这将允许你Bind一个Button.Command在子视图的财产ICommand在你的父视图模型属性:
在TreeViewView:
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand,
RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
Run Code Online (Sandbox Code Playgroud)
当然,这假定所讨论的父视图模型的一个实例被设置为DataContext的MainWindow.
| 归档时间: |
|
| 查看次数: |
12698 次 |
| 最近记录: |