在实际的开发中,我们经常会遇到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>
<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的数据转换。
WPF (Windows Presentation Foundation) 是一种用于创建桌面应用程序的强大框架,其中数据绑定 (Binding) 是核心功能之一,它可以将 UI 元素与数据源进行连接,使得 UI 随数据的变化而自动更新,而不需要手动更新每个控件。
1.Overview基于MVVM实现一段绑定大伙都不陌生,Binding是wpf整个体系中最核心的对象之一这里就来解读一下我花了纯两周时间有哪些秘密。这里我先提出几个问题应该是大家感兴趣的...
1.关于INotifyPropertyChanged
在WPF中,常常需要让UI空间绑定变量,当我们在UI中修改值时,这个修改能够同步到对象中去,要实现这个功能,往往需要让这个对象派生自INotifyPropertyChanged 接口,下面给一个例子:
public class ExecutionModule: INotifyProperty..
WPF在使用Binding时,经常需要进行数据校验,如果校验失败需要捕获失败的原因,并加以展示,本文主要介绍数据校验异常并捕获的三种方式。点击继续调试,会出现如下效果,调试状态下会比较难受,但是在程序打包运行后,效果和之前一样,但是不推荐这样,比较消耗资源。想要获得错误内容,需要用Validation.Errors静态函数,获得一个集合,一般都是一条数据。可以自定一个类,继承自ValidationRule,类中包括验证规则。如果不是依赖属性,可以利用引发异常的方式来让XAML来捕获。
<Button Content="删除" Width="90" Name="btnDel" Margin="10, 5, 5, 5" Command="{Binding CmdDelPic}" IsEnabled="{Binding ElementName=lbImgs, Path=SelectedItems.Count}"/>
参考文章:https://st
我们知道WPF最重要的一个特性是数据驱动UI,Binding就是实现这个特性的桥梁,这个类把数据和界面控件关联起来。而且它还支持双向通信。当数据改变时,界面显示会自动改变;当界面内容改变时,后台的数据也会自动改变。当然这个双向通信是可以设置的。
1、Binding基础
binding源和目标。刚才说binding是一座桥梁,那源和目标就是桥梁的两端。一般来说,源就是数据,目标就是UI,但也可以...
https://blog.csdn.net/sanqianheijia/article/details/90746835
此博文详细写了清空的方法,所以清空请依据该博主的博客。下面写判空
新建一个类就好。
引用的命名空间:
using System.Windows.Controls;//此命名空间为Grid服务
using System.Windows;//此命名空间为了UIE...
反向选择的相关要求
[ValueConversion(typeof(bool), typeof(bool))]
public class InverseBooleanConverter : IValueConverter
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
Syste