在Commands.cs中,定义了一个命令:
public static readonly RoutedUICommand Account_OpenDetails
= new RoutedUICommand("show account details",
"Account_OpenDetails",
typeof(MainWindow));
在UserControl1View
我有:
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction Command="LocalCommands:Command.Account_OpenDetails"
CommandParameter="{Binding AccountId}" />
</i:EventTrigger>
</i:Interaction.Triggers>
在UserControl2View
我想这样做:
<UserControl.CommandBindings>
<CommandBinding Command="LocalCommands:Command.Account_OpenDetails"
Executed="{Binding Account_OpenDetails}" />
</UserControl.CommandBindings>
我希望这会调用UserControl2ViewModel
中的以下方法(UserControl2View
的DataContext):
public void Account_OpenDetails(object sender, ExecutedRoutedEventArgs e)
相反,我得到了:
无法将'System.Reflection.RuntimeEventInfo'类型的对象强制转换为 输入'System.Reflection.MethodInfo'。
基本上,从一个用户控件的XAML我想触发一个Command,它在另一个用户控件的视图模型中处理。我可以在.cs
的{{1}}处理此问题,但我不想这样做。我希望它在视图模型中处理。
正确的语法是什么?只要我达到同样的行为,我对任何其他想法持开放态度。
答案 0 :(得分:0)
基本上,从一个用户控件的XAML我想触发一个Command,它在另一个用户控件的视图模型中处理
在主视图模型上创建一个共享的布尔标志,该标志将标记第二个控件。请按照以下步骤操作。
Boolean
标志(例如IsAccountDetailsOpen
)。 Boolean
依赖项属性。在更改处理程序方法中,根据您提到的控件的视图模型执行需要执行的操作。IsAccountDetailsOpen
。IsAccountDetailsOpen
更改为true
。IsAccountDetailsOpen
设置为true,以指示另一个控件。