WPF中Binding的数据转换—ValueConverters

WPF中Binding的数据转换—ValueConverters

在WPF中使用Binding经常会遇到需要转换的情况,如bool转为visibility,通常情况需要自己写一个类继承自IValueConverter接口,使用详情请参见Binding对数据的转换和校验,这种方法虽然不难,但是在用XAML写界面时,需要大量的创建自定义转换器,这样代码就显得不够优雅,本文推荐一个Nuget包来解决这个问题。

首先安装Nuget包ValueConverters,该包中已经涵盖了日常开发中常用的转换器,如BoolToVisibilityConverterStringIsNotNullOrEmptyConverterIsInRangeConverter,更加重要的是,它支持多个转换器进行组合,在开发工程中极大提高效率。

简单使用

勾选以阅读协议则相应的提示消失

18

<Window.Resources>
    <conv:BoolToVisibilityConverter
        x:Key="AgreementToVisiblityConvert"
        FalseValue="Hidden"
        IsInverted="True" />
</Window.Resources>

<TextBlock
    Foreground="Red"
    Text="需要勾选用户协议"
    Visibility="{Binding ElementName=cbxAgree, Path=IsChecked, Converter={StaticResource AgreementToVisiblityConvert}}" />

使用转换器组

转换组可以将多个转换器进行连接,生成自己想要的转换器,

输入用户名,则用户名不为空提示消失。

19

转换器顺序为判断输入字符串是否为空-bool取反-将布尔转换为Visibility

<Window.Resources>
    <conv:ValueConverterGroup x:Key="UserNameToVisibilityConverter">
        <conv:StringIsNotNullOrEmptyConverter />
        <conv:BoolInverter />
        <conv:BoolToVisibilityConverter />
    </conv:ValueConverterGroup>
</Window.Resources>

<TextBlock
    Foreground="Red"
    Text="用户名不为空"
    Visibility="{Binding ElementName=txtName, Path=Text, Converter={StaticResource UserNameToVisibilityConverter}}" />
判断年龄是否在指定范围内

20

<Window.Resources>
        <conv:ValueConverterGroup x:Key="AgeToVisibilityConverter">
            <conv:StringToDecimalConverter />
            <conv:IsInRangeConverter MaxValue="19" MinValue="18" />
            <conv:BoolInverter />
            <conv:BoolToVisibilityConverter />
        </conv:ValueConverterGroup>
</Window.Resources>

<TextBlock
    Foreground="Red"
    Text="年龄在18-19之间"
    Visibility="{Binding ElementName=txtAge, Path=Text, Converter={StaticResource AgeToVisibilityConverter}}" />
密码长度判断

21

<Window.Resources>
        <conv:ValueConverterGroup x:Key="PasswordToVisibilityConverter">
            <conv:IsInRangeConverter MaxValue="15" MinValue="8" />
            <conv:BoolInverter />
            <conv:BoolToVisibilityConverter />
        </conv:ValueConverterGroup>
</Window.Resources>

<TextBlock
    Foreground="Red"
    Text="密码长度不小于8"
    Visibility="{Binding ElementName=txtPassword, Path=Text.Length, Converter={StaticResource PasswordToVisibilityConverter}}" />

使用单例转换器

ValueConverters包实现了单例模式,可以直接使用

<Button Content="OK" IsEnabled="{Binding ElementName=txtAge, Path=Text, Converter={x:Static conv:IsEmptyConverter.Instance}}" />

但是这样不能设置更具体的参数,只能使用提供的默认值,且有些实例不能直接使用。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WPF DataGrid 是一种强大的控件,可以用于在 WPF 应用程序显示表格数据。DataGrid 可以使用 Binding 数据来绑定到数据源,这使得在 DataGrid 显示数据变得非常简单。 下面是一个简单的示例,展示如何在 DataGrid 使用 Binding 数据: 1. 首先,创建一个数据类,用于表示要在 DataGrid 显示的数据。例如,在此示例,我们创建一个名为 Person 的类: ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } ``` 2. 接下来,在 XAML 创建一个 DataGrid 控件,并将其绑定到数据源。例如,在此示例,我们将 DataGrid 绑定到一个名为 people 的 ObservableCollection<Person> 对象: ```xaml <DataGrid ItemsSource="{Binding people}" AutoGenerateColumns="True"/> ``` 3. 最后,在代码设置 DataContext,并将 people 集合添加到 DataContext : ```csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // Create a collection of people ObservableCollection<Person> people = new ObservableCollection<Person>(); people.Add(new Person { Name = "John", Age = 30, Email = "[email protected]" }); people.Add(new Person { Name = "Jane", Age = 25, Email = "[email protected]" }); people.Add(new Person { Name = "Bob", Age = 40, Email = "[email protected]" }); // Set the DataContext DataContext = new { people }; } } ``` 现在,当运行应用程序时,将显示一个包含三个人的表格,其每个人都有一个名称、年龄和电子邮件地址。这些数据将使用 Binding 数据绑定到 DataGrid

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步、步、为营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值