【问题标题】:Xamarin forms CollectionView preselected not workingXamarin 表单 CollectionView 预选不工作
【发布时间】:2021-01-22 16:43:59
【问题描述】:

作为标题,我正在使用集合视图并希望进行默认选择,但它没有正确显示。

下面是我的部分代码:

这不起作用,第一个元素没有突出显示

CategoryCollection.ItemsSource = _categoryRepository.Get(); // list of object
CategoryCollection.SelectedItem = _categoryRepository.Get()[0];

这可以工作,第一个元素是突出显示(选中):

var temp = _categoryRepository.Get();
CategoryCollection.ItemsSource = temp ;
CategoryCollection.SelectedItem = temp[0];

我试过覆盖对象相等函数和运算符==,都不起作用。

【问题讨论】:

  • 为什么要设置 ItemsSource 两次?那不会做任何有用的事情。使用 SelectedItem 属性预选项目
  • 嗨@Jason,我粘贴了错误的代码,应该是'SelectedItem'
  • 可以吗?
  • 嗨@LeoZhu-MSFT,上面的代码不起作用。
  • 有新的更新吗?

标签: c# xamarin.forms collectionview


【解决方案1】:

我认为这是因为您没有将数据分配给同一个引用对象。

_categoryRepository.Get();_categoryRepository.Get()[0]; 可能是两个不同的引用。

当你设置 CategoryCollection.ItemsSource = _categoryRepository.Get(); 时,就像

var list1 = _categoryRepository.Get();
CategoryCollection.ItemsSource = list1;

当你CategoryCollection.SelectedItem = _categoryRepository.Get()[0];时,就像

var list2 = _categoryRepository.Get();
CategoryCollection.SelectedItem = list2[0];

但是list1和list2可能不是同一个引用对象,所以无法识别selectitem。

但是,当你使用

var temp = _categoryRepository.Get();
CategoryCollection.ItemsSource = temp ;
CategoryCollection.SelectedItem = temp[0];

temp 始终是唯一的,因此它可以识别所选项目。

【讨论】:

  • 你说得对,有两个不同的引用,所以 CollectionView 无法重新定义哪个应该是高亮的,我试过覆盖对象相等方法也没有用,我不知道 Collection.SelectedItem 如何实现。
  • @user2986600 当你使用var temp = _categoryRepository.Get();时,还是不行?
猜你喜欢
  • 2021-12-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2021-07-25
相关资源
最近更新 更多