WPF 使用匿名类作为显示的Model

来源:互联网 发布:怎么购买备案域名 编辑:程序博客网 时间:2024/06/04 01:31

在WPF中,一般使用MVVM模式,第一个M为数据显示的模型,一般一个ListView显示对应一个Model,一个ComboBox显示对应一个Model等,需要建立很多Model.
有时候,我们只是在界面显示一次性信息,不需要进行双向绑定、通知更新,这个时候,我们可以使用匿名类来绑定,不需要重新建立Model.
先看我们一般的方法:
建立一个People的Model:

 public class People    {        public int Id { get; set; }        public string Name { get; set; }        public int Age { get; set; }    }

绑定到ListView:

<ListView Name="listView" SelectionChanged="listView_SelectionChanged" SelectionMode="Single">            <ListView.View>                <GridView>                    <GridViewColumn Header="姓名" Width="100" DisplayMemberBinding="{Binding Name}"></GridViewColumn>                    <GridViewColumn Width="100" Header="年龄" DisplayMemberBinding="{Binding Age}"></GridViewColumn>                </GridView>            </ListView.View>        </ListView>

运行结果:
这里写图片描述
现在使用匿名类来显示数据,此时,我们没有用到People类:

var list = new List<object>()            {                new {Id=0,Name="li",Age=22},                new {Id=1,Name="li1",Age=22},                new {Id=2,Name="l2",Age=22},                new {Id=3,Name="l3",Age=22},                new {Id=4,Name="li4",Age=22},                new {Id=5,Name="li5",Age=22},            };            this.listView.ItemsSource = list;

listView_SelectionChanged事件中的处理代码是通用的,不变:

if (e.AddedItems == null || e.AddedItems.Count == 0)                return;            object selectedItem = e.AddedItems[0];            this.tbMsg.Text = string.Format("ID:{0} Name:{1} Age:{2}",                selectedItem.GetType().GetProperty("Id").GetValue(selectedItem, null),                selectedItem.GetType().GetProperty("Name").GetValue(selectedItem, null),                selectedItem.GetType().GetProperty("Age").GetValue(selectedItem, null));

运行结果如下:
这里写图片描述
匿名类的类型比较特殊,但是任何类型都是继承自Object的,我们使用匿名类的时候,对于匿名类对象中有哪些属性,需要做到“心知肚明”,否则容易出错。这种方法使用到了反射,性能会有所降低。

原创粉丝点击