Edit:对于 silverlight 来说,这可能是最干净的:
<TextBox Text="{Binding TB1Text, Mode=TwoWay}" />
<TextBox Text="{Binding TB2Text, Mode=TwoWay}"/>
<Button Content="Lorem Ipsum" IsEnabled="{Binding ButtonIsEnabled}"/>
private string _TB1Text;
public string TB1Text
{
get { return _TB1Text; }
set
{
if (_TB1Text != value)
{
_TB1Text = value;
PropertyChanged.Notify(() => this.TB1Text);
PropertyChanged.Notify(() => this.ButtonIsEnabled);
}
}
}
private string _TB2Text;
public string TB2Text
{
get { return _TB2Text; }
set
{
if (_TB2Text != value)
{
_TB2Text = value;
PropertyChanged.Notify(() => this.TB2Text);
PropertyChanged.Notify(() => this.ButtonIsEnabled);
}
}
}
public bool ButtonIsEnabled
{
get { return !(String.IsNullOrEmpty(TB1Text) && String.IsNullOrEmpty(TB2Text)); }
}
(PropertyChanged.Notify
只是一个扩展方法,无需传递字符串即可引发事件)
不会使用绑定,而是使用MultiDataTrigger
:
<TextBox Name="tb1"/>
<TextBox Name="tb2"/>
<Button Content="Lorem Ipsum">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Text, ElementName=tb1}" Value="{x:Static sys:String.Empty}"/>
<Condition Binding="{Binding Text, ElementName=tb2}" Value="{x:Static sys:String.Empty}"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
顺便说一句,您不需要为您的一个 TextBox 案例使用转换器:
<Button Content="Lorem Ipsum" IsEnabled="{Binding Text.Length,
ElementName=MyTextBox}"/>