在开发中遇到实现如下需求的情景:一个输入框,旁边一个清空输入的按钮,当输入框中有内容时显示清空按钮,点击该按钮可以清空输入框内容,当输入框中无内容时隐藏按钮

当然这个需求使用wpf的绑定功能很容易实现

 <TextBox Width="220"
Height="32"
HorizontalAlignment="Right"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
MaxLength="20"
Text="{Binding SearchContent,
UpdateSourceTrigger=PropertyChanged}"
pt:WatermarkHelper.WatermarkContent="{lex:LocText Search}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="TextChanged">
<i:InvokeCommandAction Command="{Binding TextChangedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
<pt:IconLabelButton Width="32"
Margin="-32,0,32,0"
Command="{Binding ClearCommand}"
Icon="/Resource;component/res/GeneralClear.png"
Visibility="{Binding IsShowClearButton,
Converter={StaticResource VisiblityConverter}}" />
   public  ICommand      TextChangedCommand = new DelegateCommand<string>(OnTextChangedCommand);
public ICommand ClearCommand = new DelegateCommand(OnClearCommand); private void OnTextChangedCommand(string obj)
{
if (string.IsNullOrEmpty(SearchContent))
{
IsShowClearButton = false;
return;
} if (SearchContent.Length > )
{
IsShowClearButton = true;
}
else
{
IsShowClearButton = false;
}
} private void OnClearCommand()
{
SearchContent = string.Empty; }

上面思路是通过Textbox的TextChanged事情来处理按钮的显示隐藏。

有没更简单的方案,只在xaml中就实现这个需求,毕竟这个跟业务逻辑完全没关系,只是界面上的变化的东西。

经过努力终于找到方案了,下面看实现方法:需要引用 System.Windows.Interactivity“ 和 ”Microsoft.Expression.Interactions”程序集


<TextBox Width="300" Name="tbSearch"
Height="30"
Style="{DynamicResource TextBoxStyle}"
pt:WatermarkHelper.WatermarkContent="{lex:LocText Search}"
Text="{Binding SearchText}">
</TextBox>
<pt:IconLabelButton Width="32" x:Name="btnClear"
Margin="-32,0,0,0"
Icon="/Resource;component/res/GeneralClear.png">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:ChangePropertyAction TargetObject="{Binding}" PropertyName="SearchText" Value="" />
</i:EventTrigger>
</i:Interaction.Triggers>
<pt:IconLabelButton.Style>
<Style BasedOn="{StaticResource IconLabelButtonStyle}" TargetType="{x:Type pt:IconLabelButton}">
<Style.Triggers>
<DataTrigger Binding="{ Binding ElementName=tbSearch, Path=Text}" Value="">
<Setter Property="Control.Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</pt:IconLabelButton.Style>
</pt:IconLabelButton>

button控件的显示隐藏通过DataTrigger来实现,通过检测到Textbox的Text属性为空值时,设置属性隐藏。

点击按钮时通过EventTrigger的 ChangePropertyAction   实现, TargetOject绑定到ViewModel, PropertyName设置为TextBox的绑定ViewModel属性,直接改变绑定的属性值实现清空textbox值。

(PS通过ChangePropertyAction 的TargetOject绑定控件, 清空Text属性,可以清空textbox的界面值,但是无法同步textbox的viewmodel绑定值)

只有敢于尝试不同方法才可以进步哟,希望这篇文章对大家有帮助

WPF---Xaml中改变ViewModel的值的更多相关文章

  1. ruby for in 循环中改变i的值无效

    ruby for in 循环中改变i的值无效 for j in 1..5 puts "#{j}hehe" j = j + 2 #break end 在循环中,使用j = j + 2 ...

  2. WPF xaml中列表依赖属性的定义

    列表内容属性 如上图,是一个列表标题排序控件,我们需要定义一个标题列表,从而让调用方可以自由的设置标题信息. 在自定义控件时,会遇到列表依赖属性,那么该如何定义呢? 下面是错误的定义方式: /// & ...

  3. WPF Xaml中创建集合

    首先在xaml中创建集合是一个不可取的方法. 本方法仅作为xaml的学习. 本文略微无聊,主要是编写的东西都是老玩意. 首先是定义一个类,作为你要加载集合的模型. 结构如下 internal clas ...

  4. WPF MVVM中在ViewModel中关闭或者打开Window

    这篇博客将介绍在MVVM模式ViewModel中关闭和打开View的方法. 1. ViewModel中关闭View public class MainViewModel { public Delega ...

  5. vue2.0中改变了数组值不能实时反映到页面

    页面中点击事件checkContent,改变row数组中的row[99]的值,如果注释更改,那么页面是不能实时获取的,如图更改,则可以 具体原理:http://blog.csdn.net/websof ...

  6. 关于WPF XAML 中 Trigger的反向ExitActions

    触发器,顾名思义,就是当满足一定条件时,会触发一些操作,比如:改变控件的透明度,显隐,宽高等等,触发器本身做了一些操作,就是触发器触发条件不符合的时候,会自动把在触发器中更改的属性还原.但,并不是所有 ...

  7. vue中改变数组的值视图无变化

    今天开发的时候遇到一个多选取消点击状态的,渲染的时候先默认都选中,然后可以取消选中,自建了一个全为true的数组,点击时对应下标的arr[index]改为false,数据改变了状态没更新,突然想起来单 ...

  8. python 在 for i in range() 块中改变 i 的值的效果

    先上一段代码: for i in range(3): i = 2 print(i) 实际结果是: 2 2 2 可以发现实际效果就是 在每次执行 for 语句块的内容后 i 会被重新赋值

  9. WPF XAML中 Storyboard.TargetProperty设置TransformGroup指定的变换"RenderTransform.Children

    <Grid x:Name="xx" RenderTransformOrigin="0.5,0.5"> <Grid.RenderTransfor ...

随机推荐

  1. MLlib--GBDT算法

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/8b9cb1875288d9f6cfc2f5a9b2f10eac.html GBDT算法 江湖传言:GBDT算法 ...

  2. 从零开始学习前端JAVASCRIPT — 2、JavaScript基础ES5

    1:ES5简介 ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准的修正. 与HTML5规范进程本质类似,ES5通过对现有JavaScript ...

  3. git回退操作

    情况一:checkout 当你修改了某个文件,未提交暂存区,回退本次修改 git checkout -- file 情况三:reset 当你的代码,已提交到暂存区,还未提交到远程仓库 git log ...

  4. php表单提交并发送邮件给某个邮箱(示例源码)

    今天老板要求做一个需求,在官网上做一个页面提交的表单,并且当表单点击后,把表单的内容直接提交并通过发送邮件的方式到老板指定的邮箱,下面就分享 一下我的做法 首先建立一个html文档,把页面制作好,并且 ...

  5. 数据库复习总结(16)-case关键字(数据透视)

    case语法: 练习1:将性别的0.1显示为男.女 select * from StudentInfo --case:对结果集中的列进行判断 --例1:显示学生信息,性别以"男女" ...

  6. jQuery --- 实现 checkbox 样式的单选框

    早就想写点博客了 一直懒着动  最近发现一些写过的东西都不记得了,下决心把自己平时遇到的问题.得到的经验记录下来,希望能大家一点帮助 这是之前写的一个模态框 要求单选 但是 要求radio的默认样式 ...

  7. C#读取固定文本格式的txt文件

    C#读取固定文本格式的txt文件 一个简单的C#读取txt文档的程序,文档中用固定的格式存放着实例数据. //判断关键字在文档中是否存在 ] == "设备ID:107157061" ...

  8. Aps.net中基于bootstrapt图片上传插件的应用

    Aps.net中基于bootstrapt图片上传插件的应用 在最近的项目中需要使用一个图片上传的功能,而且是多张图片同时上传到服务器的文件夹中,将图片路径存放在数据库中.为了外观好看使用了bootst ...

  9. 序列化和Json

    实现了python与python程序之间内存的交互 常用场景: 1 把内存的数据写到磁盘 2 socket只能传字符串,二进制,通过序列化 ============================== ...

  10. java项目导出war包

    @参考文档 假如项目名称为yanan,进入到yanan目录下打开cmd 执行:jar -cvf yanan.war ./* 命令详解: @参考文档1 @参考文档2 jar:jar工具是个java应用程 ...