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在所有对象…还有别的办法吗?一种更干净的方法,能让我擦掉脏线吗?

WPF组合框,从ItemsSource中重新创建了SelectedItem对象

我已经找到了解决方案:

我必须重写所有对象的Equals(object obj)方法…

解决这个问题就足够了。在我看来,这是因为组合框无法在集合中找到正确的对象,因为它没有将对象与另一个对象进行比较的引用。

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