WPF 数据网格,在基于值的列中显示 X
本文关键字:显示 于值 数据网 数据 网格 WPF | 更新日期: 2023-09-27 18:35:46
我有一个数据网格,其中包含的行只是描述/值耦合
我想要的不是简单的"描述"和"值"列,而是从 1 到 4(可能值的范围)的列,并在与值对应的列中显示一个 X
换句话说,而不是
Description | Value
--------------------
Desc1 | 2
Desc2 | 4
类似的东西
Description | 1 | 2 | 3 | 4
----------------------------
Desc 1 | | X | |
Desc 2 | | | | X
我正在考虑通过在对象中执行此操作来做到这一点,但这很丑陋,我想在 WPF 中是可能的
编辑:
添加到已经想到的答案是在所有列中放入"X"并使用 4 个转换器来切换可见性,但我认为这可能只需 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;
}
}
}
因此,您只需传递模型并绑定此视图模型的列表即可。
如果你真的在处理整数,你可以在里面放一个Canvas
和一个X。然后将Value
绑定到 X 的Left
,并使用转换器转换值,以便 1 变为 0,2 变为 20,依此类推(我可以建议(v - 1) * 20
关于您在问题中写的第二个想法,如果转换器在某个模板中,则不会被迫使用转换器。使用模板的Triggers
。例如,添加一些DataTrigger
,将其绑定到值,并将DataTrigger
的Value
设置为 1。然后在DataTrigger
内放一个Setter
来设置相应 X 的Visibility
(这个缺点是你应该在所有 X 上放一个Name
。