1

我想创建一个类似于 Microsoft Outlook 的窗口标题。

为此,我创建了以下绑定:

<MultiBinding StringFormat="{}{0} - Message ({1})}">
    <Binding ElementName="txtSubject" Path="Text" />
    <Binding ElementName="biSendAsHtml">****</Binding>
</MultiBinding>

现在我想知道如何使第二个绑定有条件。比如当biSendAsHtml.IsCheckedequalstrue显示HTML else 显示Plain Text

4

2 回答 2

2

我不确定您如何认为 sa_ddam213 的答案很优雅,这很可怕。转换器,如建议的 RV1987,是正确的方法,但您可以更聪明。

创建一个转换器,它接受一个布尔值并将其转换为转换器定义中定义的选项。

public class BoolToObjectConverter : IValueConverter
{
    public object TrueValue { get; set; }
    public object FalseValue { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Convert.ToBoolean(value) ? TrueValue : FalseValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

定义转换器:

<local:BoolToObjectConverter x:Key="SendAsHtmlBoolToTextConverter"
                             TrueValue="HTML"
                             FalseValue="Plain Text"/>

并使用它:

<MultiBinding StringFormat="{}{0} - Message ({1})}">
    <Binding ElementName="txtSubject" Path="Text" />
    <Binding ElementName="biSendAsHtml" Path="IsChecked"
             Converter="{StaticResource SendAsHtmlBoolToTextConverter}"/>
</MultiBinding>

如果您愿意,您甚至可以制作 TrueValue 和 FalseValue DependencyProperties 来支持绑定。

于 2013-03-07T04:16:08.973 回答
2

创建一个IValueConverter并在您的第二个绑定中使用它 -

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
                            System.Globalization.CultureInfo culture)
    {
        return (bool)value ? "HTML" : "Your Text";
    }

    public object ConvertBack(object value, Type targetType, object parameter, 
                               System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这是你的 XAML -

<MultiBinding StringFormat="{}{0} - Message ({1})}">
    <Binding ElementName="txtSubject" Path="Text" />
    <Binding ElementName="biSendAsHtml" Path="IsChecked"
             Converter="{StaticResource Myconverter}"/>
</MultiBinding>
于 2013-03-03T15:11:28.847 回答