如果两个TextBox中的任何一个为空,请禁用按钮

Mef*_*to1 6 c# wpf xaml

我有两个文本框和一个按钮.如果其中任何一个框为空或空格,则应禁用该按钮.

<TextBox Name="firstNameTxtBox" />
<TextBox Name="lastNameTxtBox" />

<Button Content="Save" Command="{Binding Save}"  Style="{StaticResource saveButtonEnabler}" />
Run Code Online (Sandbox Code Playgroud)

和saveButtonEnabler资源:

<UserControl.Resources>
    <converters:IsButtonEnabledConverter x:Key="isButtonEnabledConverter" />
        <Style x:Key="saveButtonEnabler" TargetType="Button">
            <Setter Property="IsEnabled" Value="False"/>
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="???" />
                        <Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="???" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="IsEnabled" Value="True"/>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

转换器被适当调用,但我不知道如何将结果设置Value为Condition.

public class IsButtonEnabledConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (int)value == 0 ? false : true;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jan*_*nen 8

实际上你需要使用2个触发器将IsEnabled设置为false.您当前的实现是AND,您想要的是OR.

<TextBox x:Name="firstNameTxtBox"/>
<TextBox x:Name="lastNameTxtBox"/>
<Button Content="Save">
  <Button.Style>
     <Style TargetType="{x:Type Button}">
         <Style.Triggers>
             <DataTrigger Binding="{Binding Text.Length, ElementName=firstNameTxtBox, UpdateSourceTrigger=PropertyChanged}" Value="0">
                 <Setter Property="IsEnabled" Value="False"/>
             </DataTrigger>
             <DataTrigger Binding="{Binding Text.Length, ElementName=lastNameTxtBox, UpdateSourceTrigger=PropertyChanged}" Value="0">
                 <Setter Property="IsEnabled" Value="False"/>
             </DataTrigger>
         </Style.Triggers>
     </Style>
  </Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)

如果你想使用valueconverter方法,你需要做的就是在触发器绑定中使用'True'作为值

<Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="True" />
<Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Converter={StaticResource isButtonEnabledConverter}}" Value="True" />
Run Code Online (Sandbox Code Playgroud)


Sal*_*ari 5

IsEnabled如果有一个按钮,可以使用按钮的属性TextBox:

<Button Content="Save" Command="{Binding Save}" 
        IsEnabled="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)

对于这两种方法,请TextBoxes尝试以下操作(您无需使用converter):

<MultiDataTrigger.Conditions>
    <Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
    <Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
</MultiDataTrigger.Conditions>
Run Code Online (Sandbox Code Playgroud)

您的完整代码为:

<TextBox Name="firstNameTxtBox" />
<TextBox Name="lastNameTxtBox" />

<Button Content="Save" Command="{Binding Save}" >
      <Button.Style>
          <Style TargetType="{x:Type Button}">
              <Style.Triggers>
                  <MultiDataTrigger>
                      <MultiDataTrigger.Conditions>
                         <Condition Binding="{Binding ElementName=firstNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
                         <Condition Binding="{Binding ElementName=lastNameTxtBox, Path=Text.Length, Mode=OneWay}" Value="0"/>
                      </MultiDataTrigger.Conditions>
                      <Setter Property="IsEnabled" Value="False"/>
                 </MultiDataTrigger>
             </Style.Triggers>
          </Style>
      </Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)