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