2011-08-30 34 views
0

如果我用對象填充一個ListBoxView,那麼將爲每個對象顯示的文本將是由ToString()函數生成的文本。假設我想在某些情況下使用ToString(),在其他情況下使用GetSpecialString()。在兩者之間切換的最佳方式是什麼?在ListBoxView中獲取對象以顯示不同的字符串?

我應該有不同的ToString()方法相同的基類兩個不同的對象,或者是有辦法,我可以同時在同一個類中的toString()和GetSpecialString()方法?

+0

有ListBox或ListView,沒有ListBoxView。除非使用自定義繪製,否則ListBox始終使用ToString(),但沒有選項可以更改該選項。無論你使用什麼邏輯都應該放在你添加對象的類中。在他們的ToString覆蓋。 –

回答

2

你可以做一個類包裝您的視圖模型,它由條件返回不同的字符串:

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這樣的項目。

0

如果ToString()GetSpecialString()之間的選擇是隱瞞的,只需在要上課的課程中覆蓋ToString()即可。

+0

我認爲這是一種糟糕的做法,將後端與視圖模型聯合起來 –

+0

我正在討論在數據模型上過濾字符串,所以調用ListBox的Ite.ToString()將通過生成所需的字符串來調用適當的覆蓋。 OOP優雅的解決方案,由我。 – Tigran

相關問題