Bağlanacak nesnedeki birim sisteme bağlı olarak, çalışma zamanında TextBlocks
'un bir kısmının StringFormat
değerini belirlemem gerekir.Bağımlı Bağımlılık Özelliklerine Sahip IValueConverter
Bağlamak istediğiniz Bağımlılık Özelliğiyle bir dönüştürücüm var. Bağlama değeri, dönüşüm sürecinin belirlenmesinde kullanılır.
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();
}
}
Ben converter
<my:UnitConverter x:Key="Units" IsMetric="{Binding Path=IsMetric}"/>
beyan ve TextBlock
<TextBlock Text="{Binding Path=Breadth, Converter={StaticResource Units}}" Style="{StaticResource Values}"/>
Asla bağlamak az, aşağıdaki hatayı alıyorum:
System.Windows.Data Hatası: 2: Hedef öğe için yönetim FrameworkElement veya FrameworkContentElement bulunamıyor. BindingExpression: Yol = IsMetric; Dataıtem = null; hedef eleman 'UnitConverter' dir (HashCode = 62641008); hedef özellik 'IsMetric' (tür 'Boole') 'dir
Bu, datacontext'i ayarlamadan önce başlatılıyor ve bu nedenle IsMetric
özelliğini bağlamak için hiçbir şey yoktur. İstenilen sonuca nasıl ulaşabilirim?
Ben yüzlerce TextBlocks var ve bunu geçmek ve hepsini değiştirmek zorunda kalmak istemediğim gibi bunu önlemek istiyordum. –
Teşekkürler adamım, evet, aynı özelliği kurduğumu fark ettim, eğer böyle denirse! MultiBinding Works Büyük Ancak –