我有两个文本框。
Textbox A
和Textbox B
。
我想将这两个文本框绑定到一个命令按钮Button C
。
即如果用户更改了任何两个文本框的文本,则只有命令按钮才会激活。
从Code Behind文件中实现上述操作非常容易,但我想知道是否可以将单个控件Button C
绑定到两个元素Textbox A
和Textbox B
并实现所需通过XAML。
谢谢和问候。
答案 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");
}
}