我需要在运行时根据要绑定的对象中标识的单位系统确定某个绑定TextBlocks
的StringFormat
。具有绑定相关属性的IValueConverter
我有一个转换器,我想绑定一个依赖属性。 Bound值用于确定转换过程。
public class UnitConverter : DependencyObject, IValueConverter
{
public static readonly DependencyProperty IsMetricProperty =
DependencyProperty.Register("IsMetric", typeof(bool), typeof(UnitConverter), new PropertyMetadata(true, ValueChanged));
private static void ValueChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
((UnitConverter)source).IsMetric = (bool)e.NewValue;
}
public bool IsMetric
{
get { return (bool)this.GetValue(IsMetricProperty); }
set { this.SetValue(IsMetricProperty, value); }
}
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (IsMetric)
return string.Format("{0:0.0}", value);
else
return string.Format("{0:0.000}", value);
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
我宣布的转换器
<my:UnitConverter x:Key="Units" IsMetric="{Binding Path=IsMetric}"/>
,并绑定TextBlock的
<TextBlock Text="{Binding Path=Breadth, Converter={StaticResource Units}}" Style="{StaticResource Values}"/>
从来没有少,我得到以下错误:
System.Windows.Data错误: 2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression:路径= IsMetric;的DataItem = NULL;目标元素是'UnitConverter'(HashCode = 62641008);目标属性是'IsMetric'(类型'布尔')
我想这是在我设置datacontext之前初始化,因此没有什么可以绑定IsMetric
属性。我怎样才能达到预期的效果?
我想避免这种情况,因为我有数百个TextBlocks,我不想经过并改变它们。 – 2012-04-02 19:16:21
谢谢你,是的,我意识到我只是设置相同的属性,以及如果它曾经被称为是!然而,MultiBinding很有效 – 2012-04-02 19:34:26