WPF Datagrid,根据值在列中显示X.

时间:2016-02-22 17:55:33

标签: c# wpf 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个转换器或者可能是另一种方式

2 个答案:

答案 0 :(得分:2)

你可以通过自定义网格模板做到这一点,但我认为使用这样的视图模型的简单和最好的方式:

  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;
        }
    }

}

所以你可以传递你的模型并绑定这个ViewModel的列表。

答案 1 :(得分:1)

如果您真的使用整数,可以在其中放置一个Canvas和一个X.然后将Value绑定到X的Left,并使用转换器转换值,使1变为0,2变为20等等(我可以建议{{1} })

关于你在问题中写的第二个想法,如果这些是在某个模板中,你不会被迫使用转换器。使用模板的(v - 1) * 20。例如,添加一些Triggers,将其绑定到值,并将DataTrigger的{​​{1}}设置为1。然后在Value内放置一个DataTrigger来设置相应X的Setter。(这个有一个缺点,你应该在所有X上放一个DataTrigger 。)