WPF感悟(2)——XAML與C#的語法不對稱
XAML的語法與C#的語法並不是完全對稱的,最明顯的就是在設置Binding的時候。
XAML:
<ListBox Name="listBox1" ItemsSource="{Binding ...}" .../>
如何看待ItemsSource="{Binding ...}這個attribute?如果認爲是
listBox1.ItemsSource = new Binding(...);,那就錯了——數據類型都不匹配。實際上,這句XAML對應的C#應該是:
listBox1.SetBinding(ListBox.ItemsSourceProperty, new Binding(...));
爲了讓Binding更詳細,往往把它拎出來寫,成爲這樣:
Binding b = new Binding("Path");
b.Source = XXXX;
listBox1.SetBinding(ListBox.ItemsSourceProperty, b);
===========================================================
補記一點東西:
特別是對於DataContext這個東西——
something.DataContext = aDataSource;
與
something.SetBinding(DataContextProperty, aBinding);
是完全不一樣的(當然不一樣!只是工作的時候容易搞混)。前者是設定一個對象的DataContext後,這個DataContext就不變了(是哪個對象就不變了,並不是說這個對象內的內容不變);後者是說這個對象的DataContext藉助一個Binding來改變。