根据自定义属性UWP禁用某些ListViewItem
我有一个ListView
,其中包含几种类型的自定义UserControls
。
该项目要求其中一些必须是不可点击的,所以我想禁用它们,但只是他们 。
将根据自定义属性的值启用/禁用这些项目。
我试图将ListViewItem.IsEnabled
属性设置为false
,但是它没有用,我发现的其他解决方案对我来说没有意义……
我让代码示例:
XAML
Source
是一个ObservableCollection
。
问题是我不能将ListView
的项目作为ListViewItems
,而是作为UserControl
类型:。 执行此时:
foreach(ListViewItem lwI in homeLW.Items) { //CODE }
我明白了:
System.InvalidCastException:无法转换UserControl.Type类型的对象以键入Windows.UI.Xaml.Controls.ListViewItem。
任何人都知道我怎么能做到这一点?
提前致谢 :)
foreach(var lwI in homeLW.Items) { ListViewItem item =(ListViewItem)homeLW.ContainerFromItem(lwI); item.IsEnabled = false; }
加载时,由于虚拟化,所有ListViewItems
不会被加载。 所以当你尝试从item获取容器时你会得到Null。 解决方法是关闭虚拟化。 但它会产生性能影响。 由于您确认它不会超过20个项目,我将继续添加代码
要添加到LoveToCode的答案,如果要在加载时禁用所选项而不关闭虚拟化,则需要在加载UIElement时触发代码。 否则,您将获得System.NullReferenceException。 原因是因为尚未加载框架元素以引用ListView容器。
homeLW.Loaded += DisableSelectedItemsOnLoad() private void DisableSelectedItemsOnLoad() { foreach(var lwI in homeLW.Items) { ListViewItem item =(ListViewItem)homeLW.ContainerFromItem(lwI); item.IsEnabled = false; } }