時に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を通じてコレクションを割り当てる場合
:
あなたの
UserControl
やWindow
の先頭にこのタグを追加する必要があります。は、その後、あなたのListViewにそうようにそれを使用しますItemSourceを非同期的に生成されるコレクションにバインドできるので、 'Loaded'は' ItemSource'がロードされていないUIについてロードされていると思います。 – Alex
XAMLでこれをやっていない理由はありますか? – XAMlMAX
あなたは 'OpenItems'コレクションに値を設定するメソッドを持っていて、ItemsSourceがメソッドの実行終了時に初期化されていると言ってもいいですか? – Alex