2017-08-10 3 views
1

時にnullであるので、基本的に、私はそうのようにXAMLで設定したリストビューを持っている:WPF:「ListView.ItemsSource」プロパティは、「ロードされた」イベント

<ListView Margin="0" Name="OpenItemsListView" 
    ItemTemplate="{StaticResource DataItemListItemTemplate}" 
    ItemsSource="{Binding Path=OpenItems, Mode=OneWay}" 
    Loaded="OpenItemsListView_Loaded"/> 

イベントハンドラOpenItemsListView_Loadedは次のようになります。

private void OpenItemsListView_Loaded(object sender, RoutedEventArgs e) { 
    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(((ListView)sender).ItemsSource); 
    view.GroupDescriptions.Add(new PropertyGroupDescription(nameof(DataItem.ItemTypeGroup))); 
} 

私の問題は:sender.ItemsSourceがnullであるので、私は、私はXAMLのリストビュー宣言でウィンドウのOpenItemsプロパティにバインドされていても、そのメソッドの最初の行にnull参照の例外を取得します。また、イベントハンドラが呼び出された時点でそのプロパティが現在nullに設定されていないことを確認しました。

私の質問は、リストビューをすべて設定してItemsSourceにアタッチした後に、自分のイベントが呼び出されるようにするにはどうすればいいですか?私が扱う必要がある別のイベントはありますか?あるいは、バックグラウンドでプロパティをチェックし続けてスレッドがヌルでないのを待ってから、グループを設定して終了するような、本当にハッキーで醜い何かをする必要がありますか?それとも、まったく違うシンプルできれいなソリューションがありますか?

ありがとうございます。あなたはXAMLを通じてコレクションを割り当てる場合

+0


あなたのUserControlWindowの先頭にこのタグを追加する必要があります。

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 

は、その後、あなたのListViewにそうようにそれを使用しますItemSourceを非同期的に生成されるコレクションにバインドできるので、 'Loaded'は' ItemSource'がロードされていないUIについてロードされていると思います。 – Alex

+0

XAMLでこれをやっていない理由はありますか? – XAMlMAX

+0

あなたは 'OpenItems'コレクションに値を設定するメソッドを持っていて、ItemsSourceがメソッドの実行終了時に初期化されていると言ってもいいですか? – Alex

答えて

2

このすべてが離れて行くことができます:

<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 ItemsSource="{Binding Source={StaticResource items}}"> 
+0

質問:リスト内の各アイテム、サブアイテム、サブサブアイテムなどで現在使用している ''の中でどうすればいいですか?これはトップレベルのアイテムでは機能しますが、サブアイテム以下では、各アイテムの 'SubItems'を表示する展開可能リストビューに使用しているDataTemplateに取得する必要があります。 –

+0

これは簡単です! collectionViewSourceをyuour dataTemplateのResourcesに配置し、dataTemplateの内部を参照します。 – XAMlMAX

+0

@XAMIMAX - これは、ObservableCollectionに項目がなく、あたかも空でないときにListViewを空にしています: '(また、なぜかアイデアが出ません。 –

関連する問題