• WPF---Xaml中改变ViewModel的值


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

     

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

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

  • 相关阅读:
    jvm调试相关:jmap失效下找到alternatives神器
    作业2:java内存模型图示
    Python脚本:Linux自动化执行Python脚本
    Nodejs:单线程为什么能支持高并发?
    作业1:java虚拟机内存模型图示
    SpringBoot中获取spring.profiles.active的值
    线程中使用注解出现空指针如何解决?
    java7:核心技术与最佳实践读书笔记——对象生命周期
    java7:核心技术与最佳实践读书笔记——类加载
    虚拟机上不了网啦
  • 原文地址:https://www.cnblogs.com/karl-F/p/7267174.html
Copyright © 2020-2023  润新知