WPF Binding对象、数据校验、数据转换

在WinForm中,我们要想对控件赋值,需要在后台代码中拿到控件对象进行操作,这种赋值形式,从根本上是无法实现界面与逻辑分离的。
在WPF中,微软引入了Binding对象,通过Binding,我们可以直接将控件与数据做绑定,在后台不用拿到控件对象,直接操作数据源,系统会自动监听数据源的变化实时的更新到控件上,相反的,用户改变控件的值,也会实时更新到后台数据源,这也就是我们之前所说的,WPF天生支持MVVM模式。

命令是MVVM模式实现的重要一环,
命令(Command)
模板(Template)、
数据绑定(Binding)
一起构成了WPF中的主要三个核心要素,其中模板实现了WPF灵活的控件自定义(UI),数据绑定实现了前后端的数据分离、命令则实现了前后端的逻辑分离。

在这里插入图片描述
》》》 前端绑定
在这里插入图片描述
》》后端绑定
在这里插入图片描述

binding 数据校验 数据转换

》》数据校验
在这里插入图片描述
》》》自定义一个校验规则,继承ValidationRule抽象类

 public  class ZenValidationRule: ValidationRule
 {
     public override ValidationResult Validate(object value, CultureInfo cultureInfo)
     {
         if (value == null)
             return new ValidationResult(false, "不能为空!");
         if (value as string != "Ares")
             return new ValidationResult(false, "必须是Ares");

         return new ValidationResult(true, null);
     }
 }
 public MainWindow()
 {
     InitializeComponent();
     Binding bd = new Binding() { Path = new PropertyPath("Text"), Source = this.txt1 };
     ZenValidationRule vd = new ZenValidationRule();
     vd.ValidatesOnTargetUpdated = true;
     bd.ValidationRules.Add(vd);
     bd.NotifyOnValidationError = true; 
     this.txt2.SetBinding(TextBox.TextProperty, bd);
     //添加一个路由事件  触发的条件 是发送错误【Validation.ErrorEvent】
     this.txt2.AddHandler(Validation.ErrorEvent,new RoutedEventHandler(this
         .VadidatingError));
 }

 private void VadidatingError(object sender, RoutedEventArgs e)
 {
     if (Validation.GetErrors(this.txt2).Count>0)
     {
         this.txt2.ToolTip = Validation.GetErrors(this.txt2)[0].ErrorContent.ToString();
     }
 }

》》》数据转换
在这里插入图片描述
在这里插入图片描述

 public class DateConverter : IValueConverter
 {
     //当值从绑定源传给绑定目标   触发 该方法
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
     {
         if (value == null)
         {
             return DependencyProperty.UnsetValue;

         }
         DateTime date = (DateTime)value;
         return date.ToString("yyyy-MM-dd");
     }
     //当值从绑定目标传递给绑定源时,触发此方法
     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
     {
        
         string date = value as string;
         DateTime txtDate;
         if (DateTime.TryParse(date, out txtDate)) 
         {
             return txtDate;
         }            
         return DependencyProperty.UnsetValue;
     }
 }
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
       
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:DateConverter x:Key="cvtDate"></local:DateConverter>
    </Window.Resources>
    <StackPanel>
        <DatePicker x:Name="date1" SelectedDateFormat="Short"></DatePicker>
        <TextBox x:Name="txt1" Height="50"  Width="100"  
                 Text="{Binding ElementName=date1, Path=SelectedDate, Converter={StaticResource cvtDate}}"></TextBox>
        <Label Content="{Binding ElementName=date1, Path=Text}"></Label>
    </StackPanel>
</Window>

相关推荐

  1. SpringBoot数据校验

    2024-06-06 11:44:16       39 阅读
  2. Vue 数据校验

    2024-06-06 11:44:16       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 11:44:16       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 11:44:16       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 11:44:16       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 11:44:16       18 阅读

热门阅读

  1. WPF 委托

    2024-06-06 11:44:16       8 阅读
  2. Gin入门

    Gin入门

    2024-06-06 11:44:16      8 阅读
  3. ffmpeg常用命令

    2024-06-06 11:44:16       7 阅读
  4. Yolov10环境配置+训练自己数据集(Windows10)

    2024-06-06 11:44:16       8 阅读
  5. Life perception 4

    2024-06-06 11:44:16       7 阅读
  6. python 编写登录界面

    2024-06-06 11:44:16       7 阅读
  7. pandas不要存储excel

    2024-06-06 11:44:16       8 阅读
  8. 深度学习中域适应的简要概述

    2024-06-06 11:44:16       7 阅读
  9. css实现不同设备适配

    2024-06-06 11:44:16       6 阅读