アプリのコーディング中によく ListView等へのDataBinding で変更の通知がうまくいかず、データが反映されないことがある。(俺だけ)
そんな時の確認事項リスト。
基本
XAML側
<ListView x:Name="lstHoge" ItemsSource="{Binding}"> <ListView.ItemTemplate> <DataTemplate> <Grid> <TextBlock Text="{Binding name}" /> </Grid> </DataTemplate> </ListView.ItemTemplate> </ListView>
this.DataContext = _hoge;
または
this.lstHoge.DataContext = _hoge;
ここから確認
DataContext にセットしている変数は、ObservableCollection か?
ObservableCollection<hogehoge> _hoge;
その変数のクラスは、INotifyPropertyChanged インターフェースを実装しているか?
public class Hoge : INotifyPropertyChanged { }
通知のメソッドは実装しているか?
public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
変更時に通知のメソッド読んでるか?
Hoge.Add(itm); NotifyPropertyChanged("hoge");
DataContext へのセット後に、変数を new していないか?
newするとバインド外れるので、Clear 関数とか使った方が良さげ。
_hoge.Clear();
ケースバイケースかもしれんが、とりあえず通知はされるはず。