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.
grzesiek51114