吵吵   2018-12-30  阅读:1,680

WPF开发模式叫做MVVM模式,那么原来控件和数据的相互一团操作的模式就要改成只操作数据了。

我们用DataGrid或者ListView控件来展示数据的时候一般是定义列,以及这个列绑定对象的哪个属性。

如:

GridViewColumn Header=”设备名称” Width=”140″ DisplayMemberBinding=”{Binding Path=EquipmentName}”

等于是把列给固定死了,必须知道对象的属性,才可以绑定列来展示。

那么问题就来了,万一这个列不固定怎么办?有可能有多列,也有可能只有一列,比如抬头是日期,那就可以展示N列了。

列的动态添加是没有问题的:

DataGridTextColumn colum = new DataGridTextColumn();
colum.Binding = new Binding(“Content”);
gridRcord.Columns.Add(colum);

这是想加多少就加多少的,绑定属性也没有问题,new Binding属性名就搞定了。

可是类就不好操作了,我不能动态增加一个属性吧?

比如日期20181230,我不能增加一个20181230的属性吧。

咋办?考虑以第一种模式,我分别的binding

Content1
Content2
Content3
….

这个对列来绑定是没有问题的,但是你不能定义一个类的属性有

Content1
Content2
Content3
….

这么多吧,万一更多不够用咋办?

即便你定义了1-9999这么多的Content属性,那这个类也太大了些,资源严重浪费。

此路不通,我们先思考有多行是怎么实现的?

Grid.Itemsource=LIST;

对,多行的实现其实就是绑定一个List,思路开阔一点,绑定除了绑定属性,还可以绑定列表啊List!

列表也是这个类的属性,只不过里面的数据数量是动态的!

因此绑定可以变成这样:

colum.Binding = new Binding(“Content[” + i.ToString() + “]”);

i就是个数的Index了,这里你可以用List,那就用Index索引,如果用Dictionary就可以用Key来索引。

只不过你的类要改变一下,里面的属性要改成List或者Dictionary了:

public class ViewObject
{
public string Date { get; set; }
public List Content { get; set; }

public ViewObject()
{
Content=new List();
}

绑定的是列表和索引,那么这一列就会去取该列表该索引的数据了,列表的个数就由你自己确定了!

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注