سؤال

وأنا محاولة لربط الخاصية MaxLength مربع نص WPF إلى عميق ثابت المعروف ضمن فئة. أنا باستخدام C #.

والطبقة لديها بنية لا يختلف جدا لما يلي:

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;
                 }
             }
        }
    }
}

ونعم ومتداخلة بعمق، ولكن للأسف في هذه الحالة لا أستطيع تحريك الأمور تكمل كثيرا دون يعيد كتابة الضخمة المطلوبة.

وكنت آمل سأكون قادرا على ربط MAXLENGTH النص إلى القيم Length1 أو Length2 ولكن لا أستطيع الحصول على عمل.

وكنت أتوقع الربط أن يكون شيء من هذا القبيل ما يلي:

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

وهو محل تقدير أي مساعدة.

وشكرا جزيلا

هل كانت مفيدة؟

المحلول 2

والثابتة!

في البداية حاولت القيام بذلك:

{Binding Path=MetaData+Sizes.Length1}

والتي جمعت طيب، ولكن الربط فشل في وقت التشغيل، على الرغم من شيء من الدرجة الاولى "اثنان" يجري في datacontext الطريق لا يمكن أن تحل في صفوف ساكنة الداخلية (يمكن لي أن فعلت مثل: {ربط مسار = {س: ثابت الوصفية + Size.Length1}}؟)

وكان علي أن عزف مع تخطيط صفوفي قليلا ولكن الربط يعمل الآن.

والبنية الطبقية جديد:

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}"

ما يبدو للعمل طيب. لست متأكدا ما إذا كان أو لم يكن الثوابت اللازمة لتحويلها إلى الخصائص، ولكن لا يبدو أن هناك أي ضرر في ذلك.

والشكر للجميع على مساعدتكم!

نصائح أخرى

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

وخصائص فترات المرجعية. بالإضافة إلى علامات تشير إلى الطبقات الداخلية.

ومحاولة الربط مع x: ثابت. إضافة XMLNS: مساحة الاسم المحلي مع مساحة من الأحجام لرأس XAML الخاص بك ومن ثم ربط مع شيء من هذا القبيل:

{x:Static local:Sizes.Length1}

ومما يؤسف له، مع ما يلي أحصل على Type 'One.Two.MetaData.Sizes' not found الخطأ. أنا لا يمكن إنشاء مساحة الاسم المحلي أعمق من "بلاه" (وأيضا وفقا لVS2008 على أي حال)

xmlns:local="clr-namespace:Blah"

و

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

وإذا واحد هو ليس فئة ثابتة لا يمكن ربط ذلك مع x: ثابت. لماذا استخدام الطبقات الداخلية؟ إذا الفوقية هو خارج من اثنين، والأحجام هي خاصية، يمكنك الوصول بسهولة مع x: ثابت. لا يمكنك ربط أنواع في هذه الحالة، إلا أن الكائنات الموجودة. ولكن الأولى والثانية أنواع، وليس الكائنات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top