WPF中,Combox的SelectedItem屬性綁定成功后,未能默認顯示上一次選擇的結果。


問題描述:
 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"/>

 

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM