2013-03-09 5 views
112

है वहाँ एक रास्ता मैं एक Style में ऐसा कर सकता है:बाइंडिंग ConverterParameter

<Style TargetType="FrameworkElement"> 
    <Setter Property="Visibility"> 
     <Setter.Value> 
      <Binding Path="Tag" 
       RelativeSource="{RelativeSource AncestorType=UserControl}" 
       Converter="{StaticResource AccessLevelToVisibilityConverter}" 
       ConverterParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag}" />       
     </Setter.Value> 
    </Setter> 
</Style> 

मैं बस मेरी कनवर्टर वर्ग के लिए शीर्ष स्तर के माता पिता की Tag और नियंत्रण के ही Tag भेजने की जरूरत है।

उत्तर

227

ConverterParameter संपत्ति को बाध्य नहीं किया जा सकता क्योंकि यह एक निर्भरता संपत्ति नहीं है।

BindingDependencyObject से प्राप्त नहीं किया गया है इसकी कोई भी गुण निर्भरता गुण नहीं हो सकता है। नतीजतन, एक बाध्यकारी कभी भी किसी अन्य बाध्यकारी का लक्ष्य वस्तु नहीं हो सकता है।

हालांकि एक वैकल्पिक समाधान है।

public class AccessLevelToVisibilityConverter : IMultiValueConverter 
{ 
    public object Convert(
     object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return values.All(v => (v is bool && (bool)v)) 
      ? Visibility.Visible 
      : Visibility.Hidden; 
    } 

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

<Style TargetType="FrameworkElement"> 
    <Setter Property="Visibility"> 
     <Setter.Value> 
      <MultiBinding Converter="{StaticResource AccessLevelToVisibilityConverter}"> 
       <Binding Path="Tag" RelativeSource="{RelativeSource Mode=FindAncestor, 
                AncestorType=UserControl}"/> 
       <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}"/> 
      </MultiBinding> 
     </Setter.Value> 
    </Setter> 
</Style> 

बहु मूल्य कनवर्टर इनपुट के रूप में स्रोत मानों की एक सरणी हो जाता है: आप एक multi-value converter एक सामान्य बाध्यकारी के बजाय साथ एक MultiBinding इस्तेमाल कर सकते हैं

29

नहीं, दुर्भाग्य से यह नहीं संभव हो जाएगा क्योंकि ConverterParameter एक DependencyProperty नहीं है तो आप बाइंडिंग

उपयोग करने के लिए सक्षम नहीं होगा लेकिन शायद आप को धोखा देने और IMultiValueConverter के साथ एक MultiBinding का उपयोग 2 Tag गुण में पारित करने के लिए कर सकता है ।

संबंधित मुद्दे