.net - DataTrigger 使 WPF 按钮处于非事件状态,直到 TextBox 具有值

标签 .net wpf xaml binding

我希望 Button 控件的属性为 IsEnabled="False",直到在 中的 TextBox 中输入值为止窗口

到目前为止的代码:

<Button
  Content="Click Me"
  Name="ClickMe"
  VerticalAlignment="Top"
  Click="ClickMe_Click">
  <Button.Style>
    <Style>
      <Style.Triggers>
        <DataTrigger
          Binding="{Binding ElementName=textBox, Path=Length}"
          <!-- or even: Binding="{Binding Path=textBox.Length}" -->
          Value="0">
          <Setter
            Property="Button.IsEnabled"
            Value="false" />
          </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

此外,是否可以让此 Button 控件的 IsEnabled 属性基于 3 个不同的 TextBox 控件,并且都具有值?

最佳答案

假设您正在使用表示模型(例如 ViewModel),您应该直接绑定(bind)数据而不是 UI 元素。

<Style.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding FirstName}" Value="{x:Null}" />
            <Condition Binding="{Binding MiddleName}" Value="{x:Null}" />
            <Condition Binding="{Binding LastName}" Value="{x:Null}" />
        </MultiDataTrigger.Conditions>
        <Setter Property="Button.IsEnabled" Value="False" />
    </MultiDataTrigger>
</Style.Triggers>

也就是说,如果您使用的是演示模型,则可以随时添加 bool “EnableSave”属性并处理所有表示逻辑,而不是在 View 本身中。

更新

从评论中可以看出,我错误地将其设置为启用 Button任何 TextBox有一个值,但要求是Button全部TextBox时启用es 有值。

从概念上讲,您所要做的就是反转条件 - 我们想要的是“如果所有条件都为真,则为真”,而不是“如果所有条件都为假,则为假”。

问题是,没有办法在 XAML 中说“not null”——没有 IValueConverter 就不可能。 , 那是。我会创建一个 NullToBoolConverter返回 false对于 nulltrue对于 != null .

给定这样一个转换器:

<Style.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding FirstName,
                Converter={StaticResource NullToBoolConverter}}" Value="True" />
            <Condition Binding="{Binding MiddleName,
                Converter={StaticResource NullToBoolConverter}}" Value="True" />
            <Condition Binding="{Binding LastName,
                Converter={StaticResource NullToBoolConverter}}" Value="True" />
        </MultiDataTrigger.Conditions>
        <Setter Property="Button.IsEnabled" Value="True" />
    </MultiDataTrigger>
</Style.Triggers>

关于.net - DataTrigger 使 WPF 按钮处于非事件状态,直到 TextBox 具有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662349/

相关文章:

java - Java VM 与 .NET CLR 的性能基准测试

c# - 使用 LINQ 从 DataSet 填充对象属性

xaml - Xamarin XAML 数据触发器动画

c# - 将列表框的选定项目传递到 xaml

c# - 创建只接受数字的 WPF TextBox

wpf - 获取 ItemsControl 中的选定项目

javascript - Angular 绑定(bind)表到通用对象

c# - WPF 中的倒角半径(类似于负半径)

c# - 使用C#以编程方式调整网格中的行数

WPF MVVM ScrollIntoView