WPF组合框,从ItemsSource中重新创建了SelectedItem对象
本文关键字:创建 对象 SelectedItem 新创建 组合 ItemsSource WPF | 更新日期: 2023-09-27 18:02:07
我有一个问题的组合框。
<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,是建立在我的ViewModel从一个xml配置文件。
当我通过组合框选择一个维度时,我的"CGEM。尺寸"更新得很好。
问题在另一方面……
我可以将CGEMs保存在XML文件中,以便稍后重新加载。当我重新创建维度对象(使用XmlSerialiser)时,组合框没有更新…
重新更新组合框的唯一方法是替换"CGEM"。维度",由集合中对应的维度…这不是真正干净的解决方案…
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在所有对象…还有别的办法吗?一种更干净的方法,能让我擦掉脏线吗?
我已经找到了解决方案:
我必须重写所有对象的Equals(object obj)方法…
解决这个问题就足够了。在我看来,这是因为组合框无法在集合中找到正确的对象,因为它没有将对象与另一个对象进行比较的引用。
public override bool Equals(object obj)
{
return this.DisplayName==(obj as Dimension).DisplayName;
}