我有一个数据网格,其中包含的行只是描述/值对
我想要的不是简单的“描述”和“值”列,而是1到4列(可能值的范围),并在与值对应的列中显示X
换句话说,而不是
Description | Value
--------------------
Desc1 | 2
Desc2 | 4
像
这样的东西Description | 1 | 2 | 3 | 4
----------------------------
Desc 1 | | X | |
Desc 2 | | | | X
我正在考虑通过在对象中执行此操作,但这非常难看,我想在WPF中可能会这样做
编辑:
添加到已经想到的答案中的是在所有列中放置“X”并使用4个转换器来切换可见性,但我认为这可能只能使用1个转换器或者可能是另一种方式
答案 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
。)