【发布时间】:2019-12-17 04:27:32
【问题描述】:
如何从带有 MVVM 模式的代码中选择几行到 ListView 中?
我使用的 ListView 是由一个已经不在的队友制作的
public static readonly DependencyProperty SelectedItemsListProperty = DependencyProperty.Register("SelectedItemsList" , typeof(IList) , typeof(SrListView) , new PropertyMetadata(null));
(...)
public IList SelectedItemsList
{
get
{
return ( IList )GetValue(SelectedItemsListProperty);
}
set
{
SetValue(SelectedItemsListProperty , value);
}
}
(...)
private void SrListView_SelectionChanged(object sender , SelectionChangedEventArgs e)
{
SelectedItemsList = SelectedItems;
}
我像这样使用这个列表视图:
<CustomListView SelectionMode="Extended"
ItemsSource="{Binding ocPackages}"
SelectedItem="{Binding objSelectedPackage}"
SelectedItemsList="{Binding ilSelectedPackages, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</CustomListView>
private IList _ilSelectedPackages; // = new ArrayList()
public IList ilSelectedPackages
{
get
{
return _ilSelectedPackages;
}
set
{
_ilSelectedPackages = value;
OnPropertyChanged(nameof(ilSelectedPackages));
}
}
ilSelectedPackages.Clear();
ilSelectedPackages.Add(objDTO_PackageToSelect);
我尝试清除然后填充 ilSelectedPackages 但这对 ListView 的选择没有影响:(
我找到了这个主题Managing multiple selections with MVVM,但我无法解决我的问题:(
编辑 1:“Multiselect ListBox”主题并不能帮助我解决我的问题,因为它默认没有在 ListViews 中实现,在我的问题中我说明这是一个自制的ListView,以及如何将“SelectedItemsList”添加到默认的ListView中。
编辑 2: 看了这个答案https://stackoverflow.com/a/51254960/10617386 后,我尝试通过“BindableTwoWay”行为修改自制的 ListView 组件没有成功 :
public static readonly DependencyProperty SelectedItemsListProperty = DependencyProperty.Register("SelectedItemsList", typeof(IList), typeof(SrListView), new FrameworkPropertyMetadata(default(IList),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedItemsListChanged));
(...)
private static void OnSelectedItemsListChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is SrListView ListView)
ListView.SetSelectedItems(ListView.SelectedItemsList);
}
感谢您的帮助
【问题讨论】:
-
“但我无法解决我的问题” - 您是否尝试过 accepted answer 或者您无法解决的问题?除非您详细说明为什么不能使用提供的解决方案,否则您的问题是重复的,必须关闭。
-
您好 Sinatr,感谢您的回答,是的,我已经尝试过了,但它对我不起作用,如果我记得清楚,当我通过在 double 中添加对象来最大化 Window 时,这会产生一个错误在 ilSelectedPackages :(
-
当您对选定项目具有集合类型依赖属性时,您需要附加一个 CollectionChanged 事件处理程序,如下所示,例如在这里:stackoverflow.com/a/9128855/1136211。或在这里:stackoverflow.com/a/15023687/1136211
-
@Clemens 感谢您的回答,您的意思是我必须将我的 IList (ilSelectedPackages) 订阅到 CollectionChanged 事件?
-
Multiselect ListBox的可能重复
标签: c# wpf listview mvvm data-binding