2008-10-24 11 views
18

पर बाइंडिंग टेक्स्टबॉक्स अधिकतम लम्बाई मैं एक डब्ल्यूपीएफ टेक्स्टबॉक्स की मैक्सलेन्थ संपत्ति को कक्षा के भीतर एक ज्ञात निरंतर गहराई से बांधने का प्रयास कर रहा हूं। मैं सी # का उपयोग कर रहा हूँ।एक्सएएमएल: क्लास निरंतर

वर्ग एक संरचना भी निम्न के भिन्न नहीं है:

namespace Blah 
{ 
    public partial class One 
    { 
     public partial class Two 
     { 
      public string MyBindingValue { get; set; } 

      public static class MetaData 
      { 
       public static class Sizes 
       { 
        public const int Length1 = 10; 
        public const int Length2 = 20; 
       } 
      } 
     } 
    } 
} 

हाँ, यह गहरा नीडिंत है, लेकिन दुर्भाग्य से इस मामले में मैं चीजों को बहुत बड़ा आवश्यक पुनर्लेखन के बिना बहुत ज्यादा दौर स्थानांतरित नहीं कर सकते।

मुझे उम्मीद थी कि मैं टेक्स्टबॉक्स मैक्सलाइट को लंबाई 1 या लंबाई 2 मानों से बांधने में सक्षम हूं लेकिन मैं इसे काम नहीं कर सकता।

<Textbox Text="{Binding Path=MyBindingValue}" MaxLength="{Binding Path=Blah.One.Two.MetaData.Sizes.Length1}" /> 

किसी भी मदद की सराहना की है:

मैं बाध्यकारी निम्नलिखित की तरह कुछ होने की उम्मीद कर रहा था।

बहुत धन्यवाद

उत्तर

6

फिक्स्ड!

शुरू में मैं यह कर की कोशिश की:

{Binding Path=MetaData+Sizes.Length1} 

जो ठीक संकलित, हालांकि बाध्यकारी के बावजूद, कार्यावधि में विफल रहा है क्लास 'दो' DataContext पथ भीतरी स्थिर वर्गों में हल नहीं कर सका जा रहा है (सका मैंने कुछ ऐसा किया है: {बाध्यकारी पथ = {एक्स: स्टेटिक मेटाडाटा + आकार। लम्बाई 1}}?)

मुझे अपनी कक्षाओं के लेआउट के साथ थोड़ा सा होना पड़ा लेकिन बाध्यकारी अब काम कर रहा है।

नए वर्ग संरचना:

इस प्रकार
namespace Blah 
{ 
    public static class One 
    { 
     // This metadata class is moved outside of class 'Two', but in this instance 
     // this doesn't matter as it relates to class 'One' more specifically than class 'Two' 
     public static class MetaData 
     { 
      public static class Sizes 
      { 
       public static int Length1 { get { return 10; } } 
       public static int Length2 { get { return 20; } } 
      } 
     } 

     public partial class Two 
     { 
      public string MyBindingValue { get; set; } 
     } 
    } 
} 

तब मेरे बाध्यकारी बयान है के रूप में:

xmlns:local="clr-namespace:Blah" 

और

MaxLength="{x:Static local:MetaData+Sizes.Length1}" 

ठीक काम करने के लिए प्रकट होता है कौन सा। मुझे यकीन नहीं है कि स्थिरांक को गुणों में परिवर्तित करने की आवश्यकता है या नहीं, लेकिन ऐसा करने में कोई हानि नहीं दिखती है।

आपकी मदद के लिए सभी को धन्यवाद!

0

एक्स के साथ बाध्य करने के लिए प्रयास करें: स्टेटिक। निम्नलिखित मैं त्रुटि Type 'One.Two.MetaData.Sizes' not found पाने के साथ

{x:Static local:Sizes.Length1} 
0

दुर्भाग्य से,: अपने XAML शीर्षक के आकार का नाम स्थान के साथ स्थानीय नाम स्थान और उसके बाद कुछ इस तरह से बाँध: एक xmlns जोड़ें। मैं एक स्थानीय नाम स्थान "ब्ला" की तुलना में गहरी (अच्छी तरह से VS2008 के अनुसार वैसे भी) नहीं बना सकते

xmlns:local="clr-namespace:Blah" 

और

MaxLength="{x:Static local:One.Two.MetaData.Sizes.Length1}" 
0

अगर एक एक स्थिर वर्ग आप एक्स के साथ यह करने के लिए बाध्य नहीं कर सकते नहीं है: स्टेटिक। आंतरिक कक्षाओं का उपयोग क्यों कर रहे हैं? अगर मेटाडाटा दो से बाहर है, और आकार एक संपत्ति है, तो आप इसे एक्स: स्टेटिक के साथ आसानी से एक्सेस कर सकते हैं। आप इस मामले में केवल मौजूदा वस्तुओं के लिए बाध्य नहीं कर सकते हैं। लेकिन एक और दो प्रकार हैं, वस्तुओं नहीं।

37
MaxLength="{x:Static local:One+Two+MetaData+Sizes.Length1}" 

अवधि संदर्भ गुण। इसके अलावा संकेत आंतरिक कक्षाओं का संदर्भ लें।

+0

यह उपयोगी जानकारी थी! लेकिन मेरे पास अभी तक क्लिक करने के लिए पर्याप्त प्रतिष्ठा नहीं है! – Ash

+0

मेरे लिए भी बहुत उपयोगी है। धन्यवाद Stusmith – ganeshran

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