簡體   English   中英

WPF組合框,從ItemsSource中重新創建SelectedItem對象

[英]WPF Combobox, SelectedItem object re-created out of ItemsSource

我有一個組合框問題。

<ComboBox ItemsSource="{Binding Path=DimensionsCollection}"  
          SelectedItem="{Binding CGEM.Dimension,Mode=TwoWay}" 
          Name="cb_Dimensions" 
          Width="140" Height="30" Foreground="Gray">
     <ComboBox.ItemTemplate>
          <DataTemplate DataType="Dimension">
               <TextBlock Background="Transparent" 
                          Text="{Binding DisplayName}"/>
          </DataTemplate>
     </ComboBox.ItemTemplate>
</ComboBox>

DimensionsCollection是從xml配置文件在我的ViewModel中構建的。

當我通過組合框選擇一個尺寸時,我的“ CGEM.Dimension”會很好地更新。

問題出在另一面...

我可以將CGEM保存到XML文件中,以便以后重新加載。 當我重新創建尺寸對象(使用XmlSerialiser)時,組合框未更新...

重新更新組合框的唯一方法是用集合中的對應組合替換“ CGEM.Dimension”。

using (StreamReader sr = new StreamReader(ofb.FileName))
{
     CGEMModel CGEMLoaded=(xs.Deserialize(sr) as CGEMModel);
     /* this line should be enough...*/
     this.CGEM = CGEMLoaded; 
     this.CGEM.Dimension = DimensionsCollection.Where(
          d => d.DisplayName == CGEMLoaded.Dimension.DisplayName
          ).First();         
}

我已經在所有對象中實現了INotifyPropertyChanged ...還有另一種方法嗎? 更干凈的方法,這將使我能夠刪除臟的linq行? (根據屬性,我需要一行這樣的內容...)

我找到了解決方案:

我必須重寫所有對象的Equals(object obj)方法...

解決問題就足夠了。 我認為這是因為組合框無法在集合中找到正確的對象,因為它沒有引用來將一個對象與另一個對象進行比較。

    public override bool Equals(object obj)
    {
        return this.DisplayName==(obj as Dimension).DisplayName;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM