将多个元素绑定到单个Control

时间:2014-02-18 13:40:46

标签: c# wpf xaml

我有两个文本框。 Textbox ATextbox B

我想将这两个文本框绑定到一个命令按钮Button C

即如果用户更改了任何两个文本框的文本,则只有命令按钮才会激活。

从Code Behind文件中实现上述操作非常容易,但我想知道是否可以将单个控件Button C绑定到两个元素Textbox ATextbox B并实现所需通过XAML。

谢谢和问候。

3 个答案:

答案 0 :(得分:5)

如果您想要启用该按钮,如果两个文本框中的任何一个都有文字,您可以使用MultiDataTrigger

<TextBox x:Name="TextBoxA" />
<TextBox x:Name="TextBoxB" />

<Button x:Name="ButtonC">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Text, ElementName=TextBoxA}" Value=""/>
                        <Condition Binding="{Binding Text, ElementName=TextBoxB}" Value=""/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="IsEnabled" Value="False" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

答案 1 :(得分:0)

我的建议如下:

TextBoxA绑定到Field1,TextBoxB绑定到Field2和 将ButtonC的命令绑定到中继命令。确保您实现CanExecuteMethod 这里的文章:MSDN Article on RelayEvents和此处:Implementation of RelayCommand

在canExecute方法中有一个看起来像这样的实现:

public bool CanExecuteButtonC(object a)
{
   If (!string.IsNullOrEmpty(Field1) && !string.IsNullorEmpty(Field2))
    return true;

   return false;
}

如果canExecute方法返回false,则会自动禁用该按钮,如果返回true,则会激活该按钮。

答案 2 :(得分:0)

将按钮的IsEnabled绑定到布尔属性

代码未编译或测试。

public bool IsButtonEnabled
{       
  get
  {
    return !String.IsNullorEmpty(String1) && !String.IsNullorEmpty(String2);
  }

}

确保在更改字符串时触发IsButtonEnabled的propertychanged

  public string String1
  {
      //get should be here
      set
     {
       _string1 = value;
       OnPropertyChanged("IsButtonEnabled");
       OnPropertyChanged("String1");
      }
  }