मुझे बाध्य होने के लिए ऑब्जेक्ट में पहचाने गए यूनिट सिस्टम के आधार पर रनटाइम पर TextBlocks
के StringFormat
को निर्धारित करने की आवश्यकता है।बाउंड निर्भरता गुणों के साथ IValueConverter
मेरे पास एक निर्भरता संपत्ति के साथ एक कनवर्टर है जिसे मैं बांधना चाहता हूं। बाउंड मान का उपयोग रूपांतरण प्रक्रिया को निर्धारित करने में किया जाता है।
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: लक्ष्य तत्व के लिए शासकीय फ्रेमवर्क एलिमेंट या फ्रेमवर्ककंटेंट एलिमेंट नहीं मिल रहा है। BindingExpression: पथ = IsMetric; DataItem = बातिल; लक्ष्य तत्व 'यूनिट कनवर्टर' है (हैशकोड = 62641008); लक्ष्य संपत्ति 'IsMetric' है (प्रकार 'बूलियन')
मुझे लगता है कि यह डेटाैकेंटेक्स्ट सेट करने से पहले शुरू हो रहा है और इसलिए IsMetric
संपत्ति को बांधने के लिए कुछ भी नहीं है। मैं वांछित परिणाम कैसे प्राप्त कर सकता हूं? एक कनवर्टर के साथ इस तरह
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource UnitMultiValueConverter}">
<Binding Path="Breadth" />
<Binding Path="IsMetric" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
:
मैं इस से बचने के लिए चाहता था क्योंकि मेरे पास सैकड़ों टेक्स्टब्लॉक हैं और मैं उन सभी को बदलना और नहीं बदलना चाहता था। –
धन्यवाद आदमी, हाँ मुझे एहसास हुआ कि मैं सिर्फ वही संपत्ति स्थापित कर रहा था, ठीक है अगर इसे कभी भी कहा जाता है! मल्टीबाइंडिंग वर्क्स हालांकि महान है –