绑定到自定义转换器的属性

时间:2012-06-27 20:49:15

标签: silverlight

我写了一个转换器BoolToStringConverter。转换器有两个属性TrueString和FalseString。这是我在XAML中使用它的方式

<UserControl.Resources>
    <local:BooleanToStringConverter x:Key="BooleanToStringConverter" TrueString="{Binding Strings.Open, Source={StaticResource MyStrings}}"></local:BooleanToStringConverter>
</UserControl.Resources>

这编译好了,但运行时我得到了一个xml解析异常。如果我将TrueString属性的设置更改为TrueString =“Open”,则一切正常。

这是使用的转换器:

<Button x:Name="MyButton" Content="{Binding Path=IsOpen, Converter={StaticResource BooleanToStringConverter}}" Command="{Binding MyCommand}" VerticalAlignment="Top" Style="{StaticResource MyStyle}" Margin="0,2,10,2"/>

任何想法有什么不对?我想做的就是将本地资源的属性设置为本地化值。

编辑这是我的转换器类

public class BooleanToStringConverter : IValueConverter
{
    public BooleanToStringConverter()
    {
    }

    public string TrueString
    {
        get;
        set;
    }

    public string FalseString
    {
        get;
        set;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool boolValue = System.Convert.ToBoolean(value, CultureInfo.InvariantCulture);

        return boolValue ? TrueString : FalseString;
    }

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

这是运行时异常消息:

System.Windows.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常

附加信息:设置属性'Optimize.Client.Presentation.BooleanToStringConverter.FalseString'抛出异常。 [线路:18位置:86]

2 个答案:

答案 0 :(得分:0)

您无法绑定到TrueStringFalseString属性。来自MSDN help

  

为了成为绑定的目标,属性必须是依赖属性

您可以尝试使用绑定的ConverterParameter部分作为xaml

<Button x:Name="MyButton" Content="{Binding Path=IsOpen, Converter={StaticResource BooleanToStringConverter}, ConverterParameter=Open}" 
        Command="{Binding MyCommand}" VerticalAlignment="Top" 
        Style="{StaticResource MyStyle}" Margin="0,2,10,2"/>

您还可以使转换器不那么通用,只处理打开/关闭字符串。

另一个选择是让您的值转换器扩展DependencyObject,并将您的属性转换为DependencyProperties。

答案 1 :(得分:0)

您还可以在XAML中设置公共属性,如下所示:

<localHelpers:BoolToTextConverter x:Key="boolToTextConverter">
    <localHelpers:BoolToTextConverter.TrueText>
        Sent
    </localHelpers:BoolToTextConverter.TrueText>
    <localHelpers:BoolToTextConverter.FalseText>
        Not Sent
    </localHelpers:BoolToTextConverter.FalseText>
</localHelpers:BoolToTextConverter>

完整示例位于我的博文here.