問題描述:
Combox中,設定了綁定對象,但是在第一次進入時卻沒有顯示上次選中的項。
1)查看SelectedItem對應綁定的值,也是有的(啟動時,讀取上次設置的結果,來初始化界面)。
2)退出界面,不退出程序,再次打開也能顯示上一次設置的結果。如果退出程序,再次打開界面卻沒有。
3)查看了綁定對象的反射情況,確定綁定是OK的。
問題分析:
1)由於SelectedItem是一個對象,ItemSource是該對象的集合。Combox在更新SelectedItem時,會將對應的值和ItemSource中各個對象進行比較。如果ItemSource中有該對象,則選中該值,沒有則沒有選中項。
2)不退出程序,兩個對象比較,可以根據分配的序列化空間來比較,進而能判斷ItemSource中有上次SelectedItem對應對象。
3)退出了程序,ItemSource和SelectedItem對象是分開實例化的,在信息比較時,根據空間來比較肯定在ItemSource中找不到該對象,進而沒有選中項。
解決方法:
重寫SelectedItem對象的Equal()方法。
另外相對於界面綁定,代碼綁定也挺方便的:
private void InitIFBWCbx(string cbName) { ComboBox cb = ( ComboBox) this.FindName(cbName); cb.ItemsSource = AllDCChannel; cb.DisplayMemberPath = "LableName"; //cb.SelectedValuePath = "Key"; cb.SetBinding( ActiproSoftware.Windows.Controls.Ribbon.Controls.ComboBox .SelectedValueProperty, new Binding() { Path = new PropertyPath( "ControlPower"), Source = ControlPowerSettingResult } ); }
原XML中綁定的代碼:
<ribbon:ComboBox Name="ctrlPowerSelectCbx" Height="23"Width="80"
ItemsSource="{Binding AllDCChannel}" DisplayMemberPath="LableName"
SelectedItem="{Binding ControlPowerSettingResult.ControlPower}"
SelectionChanged="ctrlPowerSelectCbx_SelectionChanged"/>
