Cześć!
Piszę już dość długo w WPF z wykorzystaniem MVVM ale spostrzegłem niedawno pewną kwestię, której nie bardzo rozumiem, a która pozwala skrócić trochę kod odpowiedzialny za Data binding.
Wyjaśnię na kontrolce DataGrid gdzie pierwszy raz zauważyłem zjawisko, o którym tutaj chcę napisać.
Mianowicie... Do tej pory kiedy robiłem Data binding do przykladowej kontrolki DataGrid to pisałem to w ten oto sposób:
<DataGrid ItemsSource="{Binding Files}"
SelectedItem="{Binding SelectedFile, UpdateSourceTrigger=PropertyChanged}">
private FileModel _selectedFile;
public ObservableCollection<FileModel> Files { get; set; }
public FileModel SelectedFile{
get { return this._selectedFile; }
set {
this._selectedFile = value;
this.OnPropertyChanged("SelectedFile");
}
}
Rzecz jasna wszystko ładnie działa: SelectedFile zmienia się w zależności od tego, który wiersz z tabeli zostanie wybrany. Jest OnPropertyChanged() więc każda zmiana jest widoczna.
A teraz to co zauważyłem:
Załóżmy, że to samo co wyżej, zbinduję w ten sposób:
<DataGrid ItemsSource="{Binding Files}"
SelectedItem="{Binding SelectedFile}">
public ObservableCollection<FileModel> Files { get; set; }
public FileModel SelectedFile { get; set; }
Wszystko ok? No wygląda ok i działa tylko pytanie czemu? O_o
Dlaczego ilekroć wybiorę wiersz z kontrolki DataGrid to wartość obiektu SelectedFile jest odświeżana POMIMO, braku wykorzystania OnPropertyChanged()?
Nie pytam o brak UpdateSourceTrigger=PropertyChanged w kodzie XAML, bo ten jest ustawiony domyślnie w ten sposób dla niektórych kontrolek i tutaj się nie czepiam ale... przecież wartość SelectedFile nie powinna być odświeżana, a jest! :)
Dlaczego? Toć to nie powinno działać hehe.