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

当然这个需求使用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 > 0){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绑定值)

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

转载于:https://www.cnblogs.com/karl-F/p/7267174.html

WPF---Xaml中改变ViewModel的值相关推荐

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

    原文:WPF xaml中列表依赖属性的定义 列表内容属性 如上图,是一个列表标题排序控件,我们需要定义一个标题列表,从而让调用方可以自由的设置标题信息. 在自定义控件时,会遇到列表依赖属性,那么该如何 ...

  2. 函数中参数有数组时注意的小问题(不一定要传递数组长度,不用返回数组,可以在函数中改变数组元素值)

    函数中参数有数组时注意的小问题: 1.不一定要传递数组长度 2.不用返回数组,可以在函数中改变数组元素值 通过下面这个小例子来验证: #include<iostream> #include ...

  3. wpf(c#)中获取ComboBox选项值

    在wpf中,获取ComboBox的值,在不同情况下,处理方式不同, 1.在非SelectionChanged事件中,可以直接通过ComboBox.Text来获取或设置(需ComboBox.IsEdit ...

  4. WPF/Silverlight中MVVM运用

    随着WPF/Silverlight等技术的出现,一种新的模式出现在大家面前,那就是MVVM,提到这个模式,大家也许感觉很迷惑,也许会不屑于故,也许你会说我现在做项目都形成了自己的框架了,为什么还要花费 ...

  5. Vue3 初探 ref、reactive 、及改变数组的值

    概况 Vue3 里要实现数据的响应式监听一共有两种方式既:ref 和 reactive 他们既有区别又有联系. ref() ref数据响应式监听.ref 函数传入一个值作为参数,一般传入基本数据类型, ...

  6. 闲话WPF之五(XAML中的类型转换)

    在前面关于XAML的Post当中,简单说明了XAML如果引入自定义名称空间.还提到过XAML基本上也是一种对象初始化语言.XAML编译器根据XAML创建对象然后设置对象的值.比如: <Butto ...

  7. WPF中关于对前台Xaml中Triggers的一些重要思考。

    原文:WPF中关于对前台Xaml中Triggers的一些重要思考. 今天在做一个小Demo的时候碰到了一个比较奇怪的问题,就是其中一个Trigger始终无法执行,<Trigger Propert ...

  8. VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题

    VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题 参考文章: (1)VUE项目中使用this.$forceUpdate();解决 ...

  9. Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色

    Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色 在图12.10~12.12中我们会看到在各个平台下活动指示器的颜色是不一样的.Android的活动指示器默认是深粉色的: ...

最新文章

  1. 设置项的相互制约关系
  2. 产品设计技术公开-一种扼杀对手的方式
  3. php对象编程遇到的BUG!
  4. 【深度学习的数学】超平面是什么?(自由度比空间维度小1)
  5. onclick 源码_仿照React源码流程打造90行代码的Hooks
  6. Google, 请不要离开我们!
  7. Spring Security3源码分析-http标签解析(转)
  8. WMI 获得已安装应用程序列表
  9. Python 基金会 —— 模块和包简介
  10. 【SysML精粹】系统建模语言概览
  11. A Game of Thrones(105)
  12. WINVNC源码分析(四)-vnchooks
  13. 使用 NoSQL 数据库提供云级别数据可伸缩性
  14. 使用了23年的Java要开始收费了?
  15. 兰道定理 HDU-5873
  16. 我对“Stay hungry,Stay foolish”的理解
  17. 《老炮儿》结尾貌似历史上的一幕
  18. mysql 当天日期零点_MySQL查询当天0点,昨天 mysql 获取当天0点 和 当天23点59分59秒...
  19. 也说 “EMC” 的”邮件门”事件
  20. 斗战胜佛还是齐天大圣

热门文章

  1. android获取文件上级目录,Android 文件存储
  2. element走马灯自动_Element Carousel 走马灯的具体实现
  3. 导入win32_为什么DLL在导入项没有成功解析时会加载失败?
  4. 最强的游戏计算机,这可能是市面上体积最小性能最强的游戏主机了
  5. python自关联_Django之Mode的外键自关联和引用未定义的Model方法
  6. 大华管理平台用户名_大华HOC智慧物流可视化联网追溯解决方案,助力物流行业更高效...
  7. exsi vmfs 没了_它是“推粪机”,隔三差五吃一盘,口臭没了排出宿便,肠道变干净...
  8. intellij2019.1 破jie不了的解决办法
  9. docker 导入导出镜像
  10. Spring5.0 Kafka2.11