我有一个Textblock,Text属性绑定到DateTime?类型数据,我想在DateTime时显示一些东西?数据为空。
下面的代码效果很好。
< TextBlock Text="{Binding DueDate, TargetNullValue='wow,It's null'}"/>
但是,如果我想将Localizedstring绑定到TargetNullValue呢? 下面的代码不起作用:(如何?
< TextBlock Text="{Binding DueDate, TargetNullValue={Binding LocalStrings.bt_help_Title1, Source={StaticResource LocalizedResources}} }"/>
答案 0 :(得分:4)
我认为没有办法用TargetNullValue做到这一点。作为解决方法,您可以尝试使用转换器:
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}" />
答案 1 :(得分: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
}