gpt4 book ai didi

wpf - 如何触发特定按钮事件的 ViewModel 命令

转载 作者:行者123 更新时间:2023-12-04 13:35:20 29 4
gpt4 key购买 nike

ViewModel 上的命令如何被按钮的特定事件调用,例如 MouseDoubleClick ?

最佳答案

您可以使用 EventTrigger在 System.Windows.Interactivity 命名空间中,它是所谓的 的一部分棱镜 框架。如果您刚刚开始使用 MVVM,现在不要太在意 Prism,但请记住它以备后用。无论如何,你可以钢化 EventTrigger
它是这样工作的:

引用程序集 System.Windows.Interactivity.dll

在 XAML 中,引用命名空间:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

然后在您的 Button 或任何其他控件中,添加一个 EventTrigger,如下所示:
<Button Content="Button">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding CommandToBindTo}"
CommandParameter="{Binding CommandParameterToBindTo}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

这样,您将事件绑定(bind)到 DataContext 上的命令。

备注

为了阐明用法,这里有一个现实生活中的例子,包括 ViewModel。虚构的要求是允许用户在列表中选择一个项目,然后执行一个将所选项目作为参数的命令:
<ListBox x:Name="ItemsList" ItemsSource="{Binding Items}" />

<Button Content="Do something with selected item">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding DoSomethingCommand}"
CommandParameter="{Binding SelectedItem,
ElementName=ItemsList}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

那就是 ViewModel。请注意如何使用命令的参数,在示例中使用通用版本的 DelegateCommand在每个 MVVM 框架中获取对象(有时 RelayCommand )。此类将所需参数的类型作为通用参数(此处为 ItemViewModel),并需要一个采用相应参数的方法(此处为 ExecuteDoSomethingWithItem(ItemViewModel ...))。剩下的就是 WPF 魔法: CommandParameter 的对象XAML 中绑定(bind)的属性将作为 Execute(...) 中的参数传递。功能。
public class ViewModel
{
ObservableCollection<ItemViewModel> Items { get; set; }

public ICommand DoSomethingCommand
{
get
{
return _doSomethingCommand ??
(_doSomethingCommand = new DelegateCommand<ItemViewModel>(ExecuteDoSomethingWithItem));
}
}

private DelegateCommand<ItemViewModel> _doSomethingCommand;

private void ExecuteDoSomethingWithItem(ItemViewModel itemToDoSomethingWith)
{
// Do something
}

public ViewModel()
{
Items = new ObservableCollection<ItemViewModel>();
// Fill the collection
}
}

享受学习 MVVM 的乐趣,这是值得的。

关于wpf - 如何触发特定按钮事件的 ViewModel 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122823/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com