2011-06-16 18 views
19


यह मेरा बंधन (छोटा, कमांड-संपत्ति भी बाध्य है) हैStringFormat

<MenuItem Header="Key" CommandParameter="{Binding StringFormat='Key: {0}', Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 

ContectMenu के PlacementTarget के टैग-संपत्ति की तरह

"Short.Plural" 

मैं क्या उम्मीद कर एक स्ट्रिंग है नजरअंदाज कर दिया है कमांड-हैंडलर में प्राप्त करने के लिए:

Key: Short.Plural 

लेकिन मैं क्या समझता हूं सहयोगी प्राप्त है:

Short.Plural 
+0

क्या आप इस मान को पैरामीटर के आदेश में भेज रहे हैं? –

उत्तर

32

लेबल StringFormat उपयोग नहीं करता है, लेकिन ContentStringFormat। इसे इस तरह प्रयोग करें:

<TextBlock x:Name="textBlock" Text="Base Text"/> 
<Label Content="{Binding Path=Text, ElementName=textBlock}" ContentStringFormat="FORMATTED {0}"/> 
+4

यह सही उत्तर है। :) – Philip

+5

इसे उत्तर के रूप में चिह्नित किया जाना चाहिए। इसके अलावा एक मेनूइटम के लिए हेडर को हेडरस्ट्रिंगफॉर्मैट प्रारूपित करने के लिए – Viv

23

मैं चकित हूँ, लेकिन मेरे परीक्षण बस पता चलता है कि StringFormat केवल तभी लक्ष्य डी-प्रोप प्रकार String की है लागू होता है। मैंने पहले कभी यह नहीं देखा है, न ही यह उल्लेख किया है। मेरे पास अभी देखने के लिए और अधिक समय नहीं है, लेकिन यह हास्यास्पद लगता है।

गंभीरता से, इस काम करता है:

<TextBlock x:Name="textBlock" Text="Base Text"/> 
<TextBlock Text="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/> 

यह नहीं करता है:

<TextBlock x:Name="textBlock" Text="Base Text"/> 
<Label Content="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/> 

Label.Content के बाद से एक String नहीं है।

+0

लेकिन कमांडपरमीटर स्ट्रिंगफॉर्मेट को पहचानने के लिए प्रतीत नहीं होता है या कम से कम यह नहीं जानता कि इसका उपयोग कैसे किया जाए, इसलिए यह केवल बाध्यकारी में मौजूद मान देता है जो स्ट्रिंगफॉर्मेट के नतीजे नहीं है। – kevindaub

0

उपयोग बाइंडिंग कनवर्टर:

public class CommandParamConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is string) 
     { 
      return string.Format("Key {0}", value); 
     } 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Windows \ UserControl संसाधन के लिए यह करें:

<Window.Resources> 
    <local:CommandParamConverter x:Key="commandParamConverter" /> 
</Window.Resources> 

मेनू CommandParameter में यह संदर्भ लें बंधन:

<MenuItem Header="Key" CommandParameter="{Binding Converter={StaticResource commandParamConverter}, Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 
+0

ठीक है, यह अभी एकमात्र सोल्यूशन है ... मैं एक कनवर्टर का उपयोग करने जा रहा हूं, लेकिन कनवर्टर पैरामीटर => "स्ट्रिंगकॉन्टेनेशन कनवर्टर" – Reini

+1

@tabina का उत्तर इसके लिए बेहतर है क्योंकि यह न केवल हटा देता है एक अतिरिक्त कनवर्टर के लिए आवश्यकता है लेकिन स्थानीयकरण को लागू करने का लाभ भी आसान है – Viv