PG.Lib

主にUWP、C#に関することやガジェット系

Binding がうまく通知されないときのチェックリスト

アプリのコーディング中によく ListView等へのDataBinding で変更の通知がうまくいかず、データが反映されないことがある。(俺だけ)

そんな時の確認事項リスト。

基本

XAML

<ListView x:Name="lstHoge" ItemsSource="{Binding}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding name}" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

 

C#

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();

 

ケースバイケースかもしれんが、とりあえず通知はされるはず。