WPF中的binding(十一)- Binding数据的转换

        在实际的开发中,我们经常会遇到Binding的Source和Target是不同的类型,如下面的例子,我们需要将一个Button的IsEnable属性绑定到一个TextBox的Text属性,实现的效果是当TextBox的输入为空时,Button不可用。
       Bingding中有一个叫做Converter的属性,顾名思义,就是转换器的意思,就可以帮助我们实现这种效果。
      首先,我们需要自己写一个Converter,方法是创建一个类,继承IValueConverter接口:

public class StringToBoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return false;

            if (value is string&&
                string.IsNullOrEmpty((string)value)==false)
            {
                return true;
            }
            return false;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

         在接口函数Convert中,我们进行从Binding的Source到Target类型的转换,在这里我们判断value是否为空,如果为空返回false,否则返回true;在ConvertBack中我们可以实现Binding的Target到Source类型的转换,同Convert的转换方法类似,在这里并没有实现,而是抛出了一个不用处理的NotImplementedException异常。

         接下来,我们在Xmal文件中,实现Binding,代码如下:

<Window x:Class="_6_34.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:_6_34"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:StringToBoolConverter x:Key="s2b"/>
    </Window.Resources>
        <Grid>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="160,82,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" 
                 />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="180,178,0,0" Name="button1" VerticalAlignment="Top" Width="75" 
                IsEnabled="{Binding Text,Converter={StaticResource s2b},ElementName=textBox1}"/>
    </Grid>
</Window>
         我们先在Window.Resources中创建了一个StringToBoolConverter对象,键值为s2b,然后将Button的
IsEnabled绑定到TextBox的Text属性上,Converter设置静态资源s2b,这样就实现了Binding的数据转换。





运行效果如下:
当TextBox为空时,Button不可用:


当当TextBox不为空时,Button自动变为可用:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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 = "john@example.com" }); people.Add(new Person { Name = "Jane", Age = 25, Email = "jane@example.com" }); people.Add(new Person { Name = "Bob", Age = 40, Email = "bob@example.com" }); // Set the DataContext DataContext = new { people }; } } ``` 现在,当运行应用程序时,将显示一个包含三个人的表格,其每个人都有一个名称、年龄和电子邮件地址。这些数据将使用 Binding 数据绑定到 DataGrid

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值