WPF 中转换器 --Converter使用详解(二)

1.前言

      WPF转换器的作用:实现源数据和目标数据之间进行特定的转化

       上一篇(文章链接:https://www.cnblogs.com/ramo/p/13476869.html)讲解了通过实现IValueConverter接口,来实现单值转换;本篇进一步讲解,通过实现IMultiValueConverter接口,来进行多值转换;

       在实际的开发过程中, 有一种场景是,当多个属性值发生变化时或多个属性值满足某一条件时,引起另一属性值的变化,这种情况就适合用多值转换;当然,多值转换也可通过自己手写事件或方法进行处理,但是通过实现IMultiValueConverter接口实现,在wpf应用中做实现,会更加灵活方便。

 

2.WPF多值转换器实现: 通过实现IMultivalueConverter 接口的Convert 方法,将多个属性同时绑定到转换器,当多个属性同时变化时,来引起另一属性的变化;

        本示例以登录为例,当用户名、密码输入框任意一个为空时,登录按钮的Enable 属性为False,当用户名、密码输入框同时有输入时,登录按钮的Enable属性为True;

       后端转换类代码: 

 1 class LoginConverter:IMultiValueConverter
 2     {
 3         public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
 4         {
 5             if (values.All(t => t != null && t.ToString() != "")) return true;
 6             return false;
 7         }
 8         public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
 9         {
10             throw new NotImplementedException();
11         }
12     }

    前端绑定转换器代码:

 1 <StackPanel Grid.Row="0" Grid.Column="0">
 2             <Label Width="60" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,80" >用户名:</Label>
 3             <TextBox Name="userName" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Margin="180,-105,0,0" ></TextBox>
 4             <Label Width="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="130,-40" >密码:</Label>
 5             <TextBox Name="passWord" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Margin="180,-40,0,0" ></TextBox>
 6             <Button Name="login" HorizontalAlignment="Center" VerticalAlignment="Top" Width="70" Height="30" Margin="190,20" >登录
 7                 <Button.IsEnabled>
 8                     <MultiBinding Converter="{StaticResource LoginConverter}">
 9                         <Binding ElementName="userName" Path="Text"></Binding>
10                         <Binding ElementName="passWord" Path="Text" ></Binding>
11                     </MultiBinding>
12                 </Button.IsEnabled>
13             </Button>
14         </StackPanel>

 3.运行效果截图

  

        此示例中,将userName、passWord 的Text 属性同时绑定到LoginConverter转换器,达到的效果:只有当用户名、密码均有输入的时候,登录按钮才可用;

 

posted @ 2020-08-12 10:00  Ramos6  阅读(1145)  评论(0编辑  收藏  举报