在ListBoxView中获取对象以显示不同的字符串?

问题描述:

如果我用对象填充一个ListBoxView,那么将为每个对象显示的文本将是由ToString()函数生成的文本。假设我想在某些情况下使用ToString(),在其他情况下使用GetSpecialString()。在两者之间切换的最佳方式是什么?在ListBoxView中获取对象以显示不同的字符串?

我应该有不同的ToString()方法相同的基类两个不同的对象,或者是有办法,我可以同时在同一个类中的toString()和GetSpecialString()方法?

+0

有ListBox或ListView,没有ListBoxView。除非使用自定义绘制,否则ListBox始终使用ToString(),但没有选项可以更改该选项。无论你使用什么逻辑都应该放在你添加对象的类中。在他们的ToString覆盖。 –

你可以做一个类包装您的视图模型,它由条件返回不同的字符串:

class ViewModelListItem { 

    public ViewModelListItem(MyObject item) { 
    this.Item = item; 
    } 

    public MyObject Item { 
    get; 
    private set; 
    } 

    public override ToString() { 
    // to do: add your logic here 
    if (...) 
     return "case A"; 
    else 
     return "Case B"; 
    } 
} 

然后,只需填写您的ListView这样的项目。

如果ToString()GetSpecialString()之间的选择是隐瞒的,只需在要上课的课程中覆盖ToString()即可。

+0

我认为这是一种糟糕的做法,将后端与视图模型联合起来 –

+0

我正在讨论在数据模型上过滤字符串,所以调用ListBox的Ite.ToString()将通过生成所需的字符串来调用适当的覆盖。 OOP优雅的解决方案,由我。 – Tigran