WPF ComboBox的自定义相等比较器

8
当我们将ComboBox的SelectedItem绑定到属性时,通常它将使用对象类型的Equals方法来确定应该在ComboBox视图中显示的选定项。(例如,参见this question)
是否可以为此自己编写比较器,而无需修改类的equals方法?我不想直接修改该方法的原因是该类也用于业务逻辑,我不希望我的相等比较器影响使用相同类的其他内容。

你能否创建另一个派生自主类的类? - D J
@DJ 但是我无法控制哪个实现被传递到我的视图模型。 - Louis Rhys
使用SelectedIndex代替SelectedItem怎么样?这样你就可以将自定义的比较逻辑放到视图模型中去查找该项的索引。 - Lubo
为什么不使用 SelectedValueSelectedValuePath 而是选择 SelectedItem - Rachel
1个回答

1
我不希望直接修改方法的原因是,该类还用于业务逻辑,我不想让我的相等比较器影响使用同一类的其他事物。这通常表示需要一个包装器:
public class Wrapper<T>
{
    public override string ToString() { ... }

    public override bool Equals(object obj) { ... }

    public T UnderlyingRecord { get; set; }
}

这样你就可以像平常一样继续进行,只有视图会使用包装对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接