0

空の文字列のデフォルト値を提供するコンバーターがあります。どうやら、ConverterParameter にバインディングを追加することはできないため、代わりにバインドするプロパティをコンバーターに追加します。

ただし、デフォルトのプロパティに対して返される値は、私の値ではなく「System.Windows.Data.Binding」の文字列です。

このバインディングをコードで解決して、必要な実際のローカライズされた文字列を返すにはどうすればよいですか?

これが私のコンバータークラスです(回答https://stackoverflow.com/a/15567799/250254に基づく):

public class DefaultForNullOrWhiteSpaceStringConverter : IValueConverter
{
    public object Default { set; get; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (!string.IsNullOrWhiteSpace((string)value))
        {
            return value;
        }
        else
        {
            if (parameter != null)
            {
                return parameter;
            }
            else
            {
                return this.Default;
            }
        }
    }

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

}

そして私のXAML:

<phone:PhoneApplicationPage.Resources>
    <tc:DefaultForNullOrWhiteSpaceStringConverter x:Key="WaypointNameConverter"
        Default="{Binding Path=LocalizedResources.Waypoint_NoName, Mode=OneTime, Source={StaticResource LocalizedStrings}}" />
</phone:PhoneApplicationPage.Resources>

<TextBlock Text="{Binding Name, Converter={StaticResource WaypointNameConverter}}" />

何か案は?

4

2 に答える 2

0

今のところ、コンバーターから継承し、コンストラクターでローカライズされた文字列を設定することで問題を解決しました。ただし、ベースコンバーターを直接使用できるようにする、私の問題に対するよりエレガントなソリューションが必要であると感じています。

public class WaypointNameConverter : DefaultForNullOrWhiteSpaceStringConverter
{
    public WaypointNameConverter()
    {
        base.Default = Resources.AppResources.Waypoint_NoName;
    }
}
于 2013-06-21T04:10:15.673 に答える