[英]WPF ComboBox SelectedItem not working with ItemsSource
[英]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.