2012-05-12 17 views
6

私は、テキスト属性がどのタイムタイムにバインドされているTextblockを持っていますか?日付型のデータが表示されたら、何かを表示したいのですか?データはnullです。
以下のコードは素晴らしいです。
ローカライズされた文字列をTargetNullValue属性にバインドする方法はありますか?

< TextBlock Text="{Binding DueDate, TargetNullValue='wow,It's null'}"/> 

しかし、何についてもし私がTargetNullValueにLocalizedstringをバインドしたいですか?
:(私はTargetNullValueであることを行うにはどのような方法が表示されませんどのように

< TextBlock Text="{Binding DueDate, TargetNullValue={Binding LocalStrings.bt_help_Title1, Source={StaticResource LocalizedResources}} }"/> 

答えて

3

回避策として、あなたがコンバータを使用して試すことができます
動作しない以下のコード:?。

public class NullValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null) 
     { 
      return value; 
     } 

     var resourceName = (string)parameter; 

     return AppResources.ResourceManager.GetString(resourceName); 
    } 

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

次に、あなたのページのリソースに追加します。

最後に
<phone:PhoneApplicationPage.Resources> 
    <local:NullValueConverter x:Key="NullValueConverter" /> 
</phone:PhoneApplicationPage.Resources> 

、TargetNullValueの代わりに使用:

<TextBlock Text="{Binding DueDate, Converter={StaticResource NullValueConverter}, ConverterParameter=bt_help_Title1}" /> 
+0

これらのすべてを追加し、エラーは、{「ローカル」の宣言されていない接頭辞である。} :(あなたはそれを宣言することになっているためだ –

+0

'のxmlns:ローカル= "clr-namespace:NamespaceOfYourProject"(電話で:あなたのページのPhoneApplicationPageノード、他はxmlns) –

+0

ありがとう、すごくうれしい! –

1

他のバインディング内にバインディングを設定することはできないため、マルチバインディングを使用する必要があります。

のような何か:ビルドするとき

<Window.Resources> 
    <local:NullConverter x:Key="NullConverter" /> 
</Window.Resources> 

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource NullConverter}"> 
      <Binding Path="DueDate"/> 
      <!-- using a windows resx file for this demo --> 
      <Binding Source="{x:Static local:LocalisedResources.ItsNull}" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

public class NullConverter : IMultiValueConverter 
{ 
    #region Implementation of IMultiValueConverter 

    public object Convert(object[] values, Type targetType, 
          object parameter, CultureInfo culture) 
    { 
     if (values == null || values.Length != 2) 
     { 
      return string.Empty; 
     } 

     return (values[0] ?? values[1]).ToString(); 
    } 

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

    #endregion 
} 
関連する問題