XAML中的戏法

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>

2,泛型因为<>的原因不能直接用在XAML中,那我们就只能有一下由C#先处理掉<>了.写一个你想要的类名A继承自泛型类.类A中无任何内容只是个别名而已.XAML中就用这个别名就可以了.(可以把这些别名统一放到一个cs文件下去管理)

3.根据enum的值进行不同的前端展示,XAML为我们提供了DataTrigger,具体写法如下

         <DataTrigger Binding="{Binding 属性}" Value="{x:Static enum的值}"> 
                
<Setter Property="控件属性" Value="具体值或者一个资源"/> 
          
</DataTrigger>

这里还有个小技巧,如果你的enum特别的多,我们想为它提供一个默认的属性行为可以这样去做

<Setter Property="控件属性" Value="具体值或者一个资源"/> 
<DataTrigger Binding="{Binding 属性}" Value="{x:Static enum的值}"> 
            
<Setter Property="控件属性" Value="具体值或者一个资源"/> 
</DataTrigger>

单独提取出来和DataTrigger并列放就行了!

原文地址:https://www.cnblogs.com/cuiweifu/p/XAML_TIP_BINDING.html