根据自定义属性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; } }