gpt4 book ai didi

wpf - ListView 的 ItemsSource 绑定(bind)未将更改推送到源

转载 作者:行者123 更新时间:2023-12-03 10:52:35 27 4
gpt4 key购买 nike

我正在使用 WPF 和 Mvvm,我的 ListView 将其 ItemSource 绑定(bind)到 ICollectionView。如何处理选定项目更改事件?

最初我有一个 DataGrid 的 ItemSource 绑定(bind)到同一个 ICollectionView 并设置集合的 CurrentChanged 事件。一切正常,但不是 ListView 的情况。

最佳答案

正如 Thomas 所提到的,您所要做的就是将列表框的 SelectedItem 属性绑定(bind)到 View 模型中的属性。为了清楚起见,这里有一个例子。

这是我的看法

   <Grid x:Name="LayoutRoot" Background="White">
<ListView ItemsSource="{Binding Contacts}" SelectedItem="{Binding SelectedContact, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>

这是我的 ViewModel
public class MainViewModel: ViewModelBase
{
ObservableCollection<ContactViewModel> contacts;
ContactViewModel selectedContact;

public ContactViewModel SelectedContact
{
get { return selectedContact; }
set {
selectedContact = value;
base.OnPropertyChanged("SelectedContact");
}
}

public ObservableCollection<ContactViewModel> Contacts
{
get { return contacts; }
set {
contacts = value;
base.OnPropertyChanged("Contacts");
}
}
}

每次您尝试更改列表框中的选择时,您都会进入 SelectedContact 的 setter 。
set 
{
contacts = value;
base.OnPropertyChanged("Contacts");
}

通过这个,您将知道所选联系人已更改。

使用 SelectedContact 属性,您还将知道您的集合中的哪个项目被选中。

如果要实现多选,还可以将 ViewModel 中的 Collection 属性绑定(bind)到 ListView 的 SelectedItems 属性。

关于wpf - ListView 的 ItemsSource 绑定(bind)未将更改推送到源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461712/

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