XAML中的戏法
2009-08-13 17:19 Franz 阅读(642) 评论(0) 编辑 收藏 举报WPF为我们提供的良好的数据绑定特性.我们可以不关心具体class与前台数据同步的问题了.从此程序员就专心研究后台业务逻辑了,事实是这样的么?我想每一个WPF开发人员也不能很肯定的回答.
我在项目中遇到的问题我来总结一下
1.C#具有良好的特性,但是XAML却不是天然的就支持多态.
2.C#2.0的泛型为我们提供了良好的开发模具,从此又让我们少写了无数代码,提高了部分程序的运行效率,但是XAML还是不支持,泛型中的"<>"在XAML中无法区分;
3.C#中我们很容易根据类的enum属性判断进一步的行为,XAML中我们是不是有时候也有这样的需求呢?
我们的应对之道:
1.XAML中我们来应对C#中的多态的法宝就是在想要根据展示数据的地方放置ContentControl,具体Content属性绑定多态的基类属性上去,
<DataTemplate DataType="{x:Type 具体多态的类型}">
具体的内容展示
</DataTemplate>
具体的内容展示
</DataTemplate>
2,泛型因为<>的原因不能直接用在XAML中,那我们就只能有一下由C#先处理掉<>了.写一个你想要的类名A继承自泛型类.类A中无任何内容只是个别名而已.XAML中就用这个别名就可以了.(可以把这些别名统一放到一个cs文件下去管理)
3.根据enum的值进行不同的前端展示,XAML为我们提供了DataTrigger,具体写法如下
<DataTrigger Binding="{Binding 属性}" Value="{x:Static enum的值}">
<Setter Property="控件属性" Value="具体值或者一个资源"/>
</DataTrigger>
<Setter Property="控件属性" Value="具体值或者一个资源"/>
</DataTrigger>
这里还有个小技巧,如果你的enum特别的多,我们想为它提供一个默认的属性行为可以这样去做
<Setter Property="控件属性" Value="具体值或者一个资源"/>
<DataTrigger Binding="{Binding 属性}" Value="{x:Static enum的值}">
<Setter Property="控件属性" Value="具体值或者一个资源"/>
</DataTrigger>
<DataTrigger Binding="{Binding 属性}" Value="{x:Static enum的值}">
<Setter Property="控件属性" Value="具体值或者一个资源"/>
</DataTrigger>
单独提取出来和DataTrigger并列放就行了!