2013-03-03 123 views
1

我想创建一个类似于Microsoft Outlook的窗口标题。有条件的XAML绑定

对于这一点,我创建了以下绑定:

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

现在我想知道我怎样才能使第二结合条件。如biSendAsHtml.IsChecked等于true显示HTML其他显示纯文本

回答

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支持绑定。

+1

这看起来像一个非常通用的方式。荣誉和感谢! – SeToY 2013-03-07 22:28:12

+0

稍作修改:如果您制作TrueValue和FalseValue属性对象而不是字符串,则它更具可重用性。例如,您可以使用颜色/笔刷来根据条件改变某种颜色。 – 2013-03-10 22:16:30

+0

呵呵,我已经想到了这一点,并在我的应用程序中做到了这一点:P谢谢! – SeToY 2013-03-11 09:27:42

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>