Strona 1 z 1

IteamSource vs. DataContext

Napisane: środa, 25 lutego 2015, 20:50
przez boby3
Witam
Czy jako źródła wiązania, dla ListBox, można zamiennie używać IteamSource z DataContext? Jaka jest różnica?

Pozdrawiam

Re: IteamSource vs. DataContext

Napisane: środa, 25 lutego 2015, 22:40
przez aszusz
Witam :)

Nie można. DataContext i ItemsSource działają osobno. Jeżeli ustawisz właściwość DataContext dla kontrolki ListBox (lub jakiejkolwiek innej kontrolki dziedziczącej po ItemsControl) na jakąś kolekcję, to ta kolekcja nie zostanie automatycznie ustawiona w ItemsSource i nie będzie powiązana z kontrolką. Co więcej, jeśli ustawisz DataContext na kolekcję do której chcesz mieć wiązanie z poziomu xaml'a to odetniesz sobie drogę do ustawienia tej samej kolekcji w ItemsSource. W DataContext chcesz mieć obiekt, który zawiera kolekcję, a w ItemsSource właściwą kolekcję.

Działa to analogicznie jak właściwość Text kontrolki TextBlock. Jeśli ustawisz łańcuch znaków w DataContext to nie zobaczysz go na ekranie, musisz ustawić go w Text.

Oprócz DataContext i ItemsSource dla kontrolek dziedziczących po ItemsControl istnieje jeszcze trzecia właściwośc: Items. Jej działanie jest podobne do działania ItemsSource ale w przeciwieństwie do ItemsSource nie odświeża wiązania kiedy kolekcja źródłowa ulega zmianie. W związku z tym mało kiedy się jej używa. Jeśli potrzebujesz dodatkowych informacji na jej temat mogę napisać kolejnego posta.

Pozdrawiam