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

在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的,我们使用匿名类的时候,对于匿名类对象中有哪些属性,需要做到“心知肚明”,否则容易出错。这种方法使用到了反射,性能会有所降低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值