2016-02-22 68 views
1

我有一個包含只是說明/值情侶WPF Datagrid的,基於價值的一列顯示的X

我想,而不是簡單的「描述」和「值」列會怎麼行一個DataGrid是列1至4個(可能的值的範圍),並顯示在列對應於所述值

換句話說的X,而不是

Description | Value 
-------------------- 
Desc1  | 2 
Desc2  | 4 

喜歡的東西

Description | 1 | 2 | 3 | 4 
---------------------------- 
Desc 1  | | X | | 
Desc 2  | | | | X 

我在想這樣做,這樣做,在對象,但是這是相當醜陋,我想這將有可能在WPF

編輯:

添加到已有答案想到的,是把「 X」中的所有列,並使用4個轉換器,將切換可見,但我覺得這可能是做,能夠只用1個轉換器,或者一個完全另一種方式

回答

1

你可以通過定製網格模板,但容易和最佳我認爲使用像這樣的視圖模式的方式:

public class MyViewModel 
{ 

    public MyViewModel(MyModel model) 
    { 
     Model = model; 
    } 

    public MyModel Model { get; set; } 
    public string Description 
    { 
     get 
     { 
      return Model.Description; 
     } 
    } 

    public string One 
    { 
     get 
     { 
      if (Model.Value == 1) 
       return "X"; 
      else 
       return string.Empty; 
     } 
    } 

    public string Two 
    { 
     get 
     { 
      if (Model.Value == 2) 
       return "X"; 
      else 
       return string.Empty; 
     } 
    } 
    public string Three 
    { 
     get 
     { 
      if (Model.Value == 3) 
       return "X"; 
      else 
       return string.Empty; 
     } 
    } 
    public string Four 
    { 
     get 
     { 
      if (Model.Value == 4) 
       return "X"; 
      else 
       return string.Empty; 
     } 
    } 

} 

所以你可以通過你的模型,並結合該視圖模型的列表。

+0

我想我可以用這一個去,這是由於我只有4列,所以不那麼「怪異」 –

1

如果你真的與整數工作,你可以把一個Canvas,和裏面一個X。然後Value綁定到X的Left,並使用轉換器來轉換值,使1到達0,2到達像20等(我可以建議(v - 1) * 20

而關於第二個想法,你在你的問題中寫道,如果這些內容位於某個模板中,則不必強制使用轉換器。使用模板的Triggers。添加一些DataTrigger,其綁定到值,並設DataTriggerValue至1,例如。然後把一個SetterDataTrigger內設置相應X的Visibility(這其中有退,你應該把Name上的所有X的。)