我正在将 MVVM 模式与 WPF 一起使用,并遇到了问题,我可以将其简化为以下内容:
我有一个 CardType 模型。
public class CardType
{
public int Id { get; set; }
public string Name { get; set; }
}
我有一个使用 CardType 的视图模型。
public class ViewModel : INotifyPropertyChanged
{
private CardType selectedCardType;
public CardType SelectedCardType
{
get { return selectedCardType; }
set
{
selectedCardType = value;
OnPropertyChanged(nameof(SelectedCardType));
}
}
public IEnumerable<CardType> CardTypes { get; set; }
// ... and so on ...
}
我的 XAML 有一个 ComboBox,其项目基于 CardType,并且应基于 SelectedCardType 预选择一个项目。
<ComboBox ItemsSource="{Binding CardTypes}"
DisplayMemberPath="Name"
SelectedItem="{Binding SelectedCardType}"/>
由于我无法控制的原因,SelectedCardType 对象将是引用不等副本CardTypes 中的项目的名称。因此,WPF 无法将 SelectedItem 与 ItemsSource 中的项目相匹配,并且当我运行该应用程序时,ComboBox 最初显示时未选择任何项目。
我尝试重写 CardType 上的 Equals() 和 GetHashCode() 方法,但 WPF 仍然无法匹配项目。
考虑到我的特殊限制,我怎样才能让 ComboBox 选择正确的项目?
你可能没有压倒一切Equals
and GetHashCode
适当地。这应该对你有用。 (但是,仅覆盖 Equals 就适用于您的情况,但当您覆盖类的 Equals 时,覆盖 GetHashCode 也被认为是一个很好的做法)
public class CardType
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
CardType cardType = obj as CardType;
return cardType.Id == Id && cardType.Name == Name;
}
public override int GetHashCode()
{
return Id.GetHashCode() & Name.GetHashCode();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)