2016-02-22 44 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的。)