gpt4 book ai didi

c# - WPF 将 UI 事件绑定(bind)到 ViewModel 中的命令

转载 作者:IT王子 更新时间:2023-10-29 03:49:44 24 4
gpt4 key购买 nike

我正在对一个简单的应用程序进行一些重构以遵循 MVVM,我的问题是如何将 SelectionChanged 事件从我的代码中移到 viewModel 后面?我看过一些将元素绑定(bind)到命令的示例,但没有完全理解。任何人都可以协助解决这个问题。谢谢!

任何人都可以使用下面的代码提供解决方案吗?非常感谢!

public partial class MyAppView : Window 
{
public MyAppView()
{
InitializeComponent();

this.DataContext = new MyAppViewModel ();

// Insert code required on object creation below this point.
}

private void contactsList_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
//TODO: Add event handler implementation here.
//for each selected contact get the labels and put in collection

ObservableCollection<AggregatedLabelModel> contactListLabels = new ObservableCollection<AggregatedLabelModel>();

foreach (ContactListModel contactList in contactsList.SelectedItems)
{
foreach (AggregatedLabelModel aggLabel in contactList.AggLabels)
{
contactListLabels.Add(aggLabel);
}
}
//aggregate the contactListLabels by name
ListCollectionView selectedLabelsView = new ListCollectionView(contactListLabels);

selectedLabelsView.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
tagsList.ItemsSource = selectedLabelsView.Groups;
}
}

最佳答案

你应该使用 EventTrigger结合 InvokeCommandAction来自 Windows.Interactivity 命名空间。这是一个例子:

<ListBox ...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectedItemChangedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>

可以引用System.Windows.Interactivity通过去 Add reference > Assemblies > Extensions .

还有完整的i命名空间是:xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" .

关于c# - WPF 将 UI 事件绑定(bind)到 ViewModel 中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4897775/

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