Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:&x27;ListView.ItemsSource';属性在';已加载';事件_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# WPF:&x27;ListView.ItemsSource';属性在';已加载';事件

C# WPF:&x27;ListView.ItemsSource';属性在';已加载';事件,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,基本上,我在XAML中设置了一个列表视图,如下所示: <ListView Margin="0" Name="OpenItemsListView" ItemTemplate="{StaticResource DataItemListItemTemplate}" ItemsSource="{Binding Path=OpenItems, Mode=OneWay}" Loaded="OpenItemsListView_Loaded"/> 我的问题是:我在该方法的

基本上,我在XAML中设置了一个列表视图,如下所示:

<ListView Margin="0" Name="OpenItemsListView"
    ItemTemplate="{StaticResource DataItemListItemTemplate}"
    ItemsSource="{Binding Path=OpenItems, Mode=OneWay}" 
    Loaded="OpenItemsListView_Loaded"/>
我的问题是:我在该方法的第一行得到一个null引用异常,因为
sender.ItemsSource
为null,即使我在XAML列表视图声明中将其绑定到窗口的
OpenItems
属性。我还检查以确保在调用事件处理程序时,该属性当前未设置为null

因此,我的问题是,如何确保在列表视图全部设置并附加到其ItemsSource之后调用我的事件?是否有其他事件需要我处理?或者我需要做一些真正的骇客和丑陋的事情,比如启动一个线程,在后台不断检查属性,等待它不为null,然后设置组,然后退出?或者我应该使用一个完全不同的简单而漂亮的解决方案


提前感谢。

如果您通过XAML分配集合,所有这些都可以消失:

<CollectionViewSource Source="{Binding OpenItems}" x:Key="items">
   <CollectionViewSource.GroupDescriptions>
       <PropertyGroupDescription PropertyName="yourPropertyHere"/>
   </CollectionViewSource.GroupDescriptions>
   <CollectionViewSource.SortDescriptions>
       <scm:SortDescription PropertyName="propertyHere" />
   </CollectionViewSource.SortDescriptions>
   <CollectionViewSource.LiveFilteringProperties>
       propertyNameHere
   </CollectionViewSource.LiveFilteringProperties>
</CollectionViewSource>  
然后在ListView中使用它,如下所示:

<ListView ItemsSource="{Binding Source={StaticResource items}}">


我没有通读整个描述,但我认为
加载的
是关于UI加载的,而不是
项源
加载的,由于ItemSource可以绑定到一个将被异步填充的集合中,那么您不在XAML中这样做有什么原因吗?我想您确实有一个方法填充
OpenItems
集合,那么公平地说ItemsSource在该方法完成执行时被初始化了吗?@XAMlMAX-嗯,我不知道在XAML中有什么方法可以做到这一点。如果你知道一种方法,我很乐意听到你的回答。尽管如此,即使我这样做了,我仍然需要一种方法来确保在绑定ItemsSource属性之后添加组描述。有什么想法吗?只是添加了一个答案,它将带走你所有的代码。您不必检查项目源,也不会影响基础集合。问题:如何在当前用于每个项目、子项目、子项目等的
中执行此操作。。。在名单上?这适用于顶级项目,但对于子项目和较低级别的项目,我需要将其放入用于显示每个项目的
子项目的可扩展列表视图的DataTemplate中。这很简单!您将collectionViewSource放在您的dataTemplate的资源中,并在dataTemplate中引用它。@XAMIMAX-这。。。正在导致ListView为空,就好像我的ObservableCollection中没有任何项,而它以前不是空的:'(再说一次,我不知道为什么。有什么想法吗?@Perrinlerson对于您使用的每个数据模板,您需要将其分配给新的数据集合,因此假设您的openItem包含其他OpenItems的集合现在您需要使用将使用
的数据模板,但如果这不起作用,您可以使用显式绑定trigger@PerrinLarson然而我们您的问题是关于绑定集合中的项。请确保您的ViewModel通过INotifyPropertyChnaged界面通知UI。
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"  
<ListView ItemsSource="{Binding Source={StaticResource items}}">