[英]Conditional XAML-Binding
我想创建一个类似于Microsoft Outlook的窗口标题。
为此,我创建了以下绑定:
<MultiBinding StringFormat="{}{0} - Message ({1})}">
<Binding ElementName="txtSubject" Path="Text" />
<Binding ElementName="biSendAsHtml">****</Binding>
</MultiBinding>
现在,我想知道如何使第二个绑定成为条件。 例如当biSendAsHtml.IsChecked
等于true
显示HTML,否则显示纯文本 。
创建一个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>
我不确定你认为sa_ddam213的答案是否优雅,这只是可怕的。 转发器,如RV1987建议,是正确的方法,但你可以更聪明。
创建一个转换器,它接受bool并将其转换为Converter定义中定义的选项。
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支持Binding。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.