在我的MVVM应用程序中,视图中有一个按钮。 当我按下一个按钮时,我希望在视图中运行一些方法,以及视图模型中的一些方法。 我将命令连接到我的按钮,因此该命令可以在视图模型中运行某些方法。但是我怎么能在视图中运行一些方法呢? 我也尝试连接点击事件,但它不起作用。 从view和viewmodel运行函数的最佳方法是什么。
谢谢,
答案 0 :(得分:2)
您可以使用交互式触发器在XAML中完全执行此操作:
<Button Content="Do Something" Click="OnClickHandler"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd ="http://www.galasoft.ch/mvvmlight">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding Path=ViewModelCommand1}" />
<cmd:EventToCommand Command="{Binding Path=ViewModelCommand2}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
在这种情况下,将调用Window处理程序和两个viewmodel命令中的每一个。如果处理程序将e.Handled设置为true,则不会调用viewmodel命令。如果设置PassEventArgsToCommand =&#34; True&#34;在cmd:EventToCommand中,您可以指定一个接受args的处理程序;设置在第一个viewmodel处理程序中处于true状态,不会停止第二个被调用,但你仍然可以手动检查第二个处理程序中的值。
现在,我说强烈鼓励您重新评估您的架构。调用代码隐藏是而不是 MVVM,并且在每天这样做的7年多的时间里,我还没有看到实际需要它的单个案例。
答案 1 :(得分:1)
在Click事件上,执行命令。
private void btnClick(object sender, RoutedEventArgs e)
{
var btn = sender as Button;
btn.Command.Execute(btn.CommandParameter);
}
答案 2 :(得分:0)
我非常怀疑你决定“在按钮点击时运行view和viewmodel方法”。对我来说,似乎你想要的是该按钮运行一个viewmodel命令,这反过来导致视图中的一些变化。如果例如可以不通过UI而是从应用程序中的其他位置执行该方法,该怎么办?观点不应该改变吗?
为此,我建议创建一个界面I [something] View,视图将实现以及视图模型引用的界面。然后,viewmodel可以在界面上调用该方法,该方法将在按钮单击时执行您所期望的操作。