将Button的可见性绑定到两个文本框的内容的最简洁方法

fun*_*bro 3 silverlight wpf windows-phone-7

Button在我的应用程序中有一个"启用",我必须确定a是否TextBox为空如此:

<Button Content="Go" 
        IsEnabled="{Binding Text, 
                    Converter={StaticResource EnableIfStringNotEmptyDataSource}, 
                    ElementName=MyTextbox}"/>
Run Code Online (Sandbox Code Playgroud)

(EnableIfStringNotEmptyDataSource为简洁省略的实施).

这会在TextBox文本更改时自动更改状态.

以同样的方式将属性绑定到两个文本框是否为空的最优雅的方法是什么?

H.B*_*.B. 7

编辑:对于silverlight来说,这可能是最干净的:

<TextBox Text="{Binding TB1Text, Mode=TwoWay}" />
<TextBox Text="{Binding TB2Text, Mode=TwoWay}"/>
<Button Content="Lorem Ipsum" IsEnabled="{Binding ButtonIsEnabled}"/>
Run Code Online (Sandbox Code Playgroud)
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)); }
}
Run Code Online (Sandbox Code Playgroud)

(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>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你不需要一个TextBox案例的转换器:

<Button Content="Lorem Ipsum" IsEnabled="{Binding Text.Length,
                                                  ElementName=MyTextBox}"/>
Run Code Online (Sandbox Code Playgroud)