2013-06-21 5 views
0

빈 문자열에 기본값을 제공하는 변환기가 있습니다. ConverterParameter에 바인딩을 추가 할 수 없으므로 대신 바인딩하는 변환기에 속성을 추가해야합니다.Windows Phone 8에서 코드를 통해 XAML 바인딩 확인

그러나 기본 값으로 되돌아 오는 값은 내 값 대신 "System.Windows.Data.Binding"문자열입니다.

코드에서이 바인딩을 어떻게 해결하여 원하는 현지화 된 실제 문자열을 반환 할 수 있습니까?

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}}" /> 

모든 아이디어를 여기

나의 컨버터 클래스 (대답 https://stackoverflow.com/a/15567799/250254 기준)이야?

답변

1

당신은 DependencyObject에서 상속과 DependencyProperty로 당신의 Default 속성을 변경하여이 작업을 수행 할 수 있어야합니다.

public class DefaultForNullOrWhiteSpaceStringConverter : DependencyObject, IValueConverter 
{ 
    public string DefaultValue 
    { 
     get { return (string)GetValue(DefaultValueProperty); } 
     set { SetValue(DefaultValueProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for DefaultValue. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty DefaultValueProperty = 
     DependencyProperty.Register("DefaultValue", typeof(string), 
     typeof(DefaultForNullOrWhiteSpaceStringConverter), new PropertyMetadata(null)); 
... 
... 
+0

완벽한 - 감사합니다! – Gavin

+0

편집 해 주셔서 감사합니다. 올바른 수정이므로 거부되었습니다. –

+0

걱정하지 마세요. 동일한 문제가있는 다른 사람이 더 쉽게 사용할 수 있도록 코드를 편집하겠다고 생각했습니다.) – Gavin

0

이제는 변환기에서 상속하고 생성자에서 지역화 된 문자열을 설정하여 문제를 해결했습니다. 그러나 기본 변환기를 직접 사용할 수있게 해주는 내 문제에 대한보다 우아한 해결책이 있어야한다고 생각합니다.

public class WaypointNameConverter : DefaultForNullOrWhiteSpaceStringConverter 
{ 
    public WaypointNameConverter() 
    { 
     base.Default = Resources.AppResources.Waypoint_NoName; 
    } 
}