2012-06-27 69 views
1

我寫了一個轉換器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.Markup.XamlParseException」的第一次機會異常出現在System.Windows.dll中

附加信息:設置屬性'Optimize.Client.Presentation.BooleanToStringConverter.FalseString'引發異常。 [Line:18 Position:86]

+0

是'TrueString'依賴屬性?你可以發佈消息,xaml解析異常的內部異常嗎? – nemesv

+0

嗨nemesv - 感謝您的答覆。我編輯了我的帖子以包含您要求的詳細信息。乾杯 – rockshire

回答

0

您無法綁定到TrueStringFalseString屬性。從MSDN help

爲了成爲有約束力的目標,屬性必須是依賴PROPERT

您可以嘗試使用XAML中綁定的ConverterParameter部分

<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。

+0

嗨肖恩 - 謝謝你的回覆。可能是一個愚蠢的問題,但我怎樣才能使用converterparameter部分?我不明白你的行:ConverterParameter = Open。你是說我可以以某種方式將我的資源字符串綁定到ConverterParameter?乾杯 – rockshire

+0

您可以使用此[msdn文章](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.converterparameter(v = VS.95).aspx )或我剛剛在帖子 –

+0

謝謝肖恩的選項之一。我將我的轉換器擴展爲DependencyObject,並按照您的建議將這些屬性轉換爲DependencyProperties,並且它非常棒!感謝您的幫助 - 非常感謝。 – rockshire

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.

相關問題