猿问

ListView 在 MVVM 中以编程方式选择多个项目

如何使用 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 的选择没有影响:(

编辑1: &ldquo;多选列表框&rdquo;主题不能帮助我解决我的问题,因为默认情况下它没有在ListViews中实现,在我的问题中我解释说它是一个自制的ListView以及如何将&ldquo;SelectedItemsList&rdquo;添加到默认ListView 。



慕工程0101907
浏览 180回答 1
1回答

LEATH

问题并不在于我最初想到的自制组件(我没有在正确的区域中搜索),而只是在我选择对象时:ilSelectedPackages.Add(objDTO_PackageToSelect);objDTO_PackageToSelect 是对象的副本,因此不是来自填充 ListView 的 ObservableCollection 的 ocPackages。结论:我们必须选择 Binded observable 集合的确切对象。DTO_Package objPackInOC = ocPackages.Where(Pack => Pack.sGuid == objDTO_PackageToSelect.sGuid).FirstOrDefault();if(objPackInOC != null)     ilSelectedPackages.Add(objPackInOC);
随时随地看视频慕课网APP
我要回答