ItemsSource a SelectedItem

Uncategorized

8 years ago

Poměrně obvyklou chybou při psaní XAMLu (především u mě, já ji doslova nemohu přestat psát) je prohození pořadí dependency properties ItemsSource a SelectedItem u ovládacích prvků pro zobrazení výběrových seznamů. Ukažme si to v kontextu prvku ListView ve WinRT. Pro binding kolekce k ListView použijeme vlastnost ItemsSource . Pro vybrání jednoho z jejích prvků použijeme SelectedItem .

<ListView SelectedItem="{Binding SelectedPerson}" ItemsSource="{Binding People}">
</ListView>

To zní dobře ne? Bohužel. XAML parser prochází náš ListView v pořadí zleva doprava. Když narazí na SelectedItem, pokusí se vybrat tento prvek v připojené kolekci. Bohužel, ten nelze nalézt a skončí to tak, že je vybraný prvek ListView znovu nastaven na null. Nyní již parser přečte i ItemsSource, ale to už je příliš pozdě na to, aby zachránil situaci. Jediné správné pořadí, kdy dostaneme opravdu požadované výsledky a zbavíme se často nepochopitelných chyb je zapsáním ItemsSource před SelectedItem.

<ListView ItemsSource="{Binding People}" SelectedItem="{Binding SelectedPerson}">
</ListView>

Zlo se skrývá v detailech.