سؤال

لدينا كائن مستمد من DependencyObject ، وينفذ بعض التبعية.

في الأساس شيء مثل هذا:

class Context : DependencyObject {
   public static readonly DependencyProperty NameProperty =
   DependencyProperty.Register ("Name", typeof (string), typeof (Context), new PropertyMetadata (""));
    public string Name {
        get {
            return (string)this.GetValue (NameProperty);
        }
        set {
            this.SetValue (NameProperty, value);
        }
    }
}

هذا يعمل ، يتم إعداد الخاصية ، يمكن أن يكون ملزماً ، وما إلى ذلك. تأتي المشكلة عندما أقوم بربط propery من WPF ، باستخدام ربط Twoway. جزء Twoway لا يحدث فعليًا ، لا يطلق WPF أبدًا مجموعة هذه الخاصية. لقد قمت بتعيين الربط مثل هذا:

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

في هذه الحالة ، يجب على الكتابة في مربع النص تحديث خاصية الاسم على الفور ، لكنها لا تفعل ذلك. إذا قمت بتغيير خاصية الاسم لتكون خاصية POCO منتظمة ، فهي تعمل (على الرغم من أن الجانب الآخر من twoway لا إلا إذا قمت بتطبيق inotifyPropertyChanged).

ماذا أفعل خطأ هنا؟ يجب أن يكون هذا أمرًا بسيطًا حقًا ، لكنه لا يسبب لي نهاية الصداع.

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

المحلول

هذا هو السلوك المتوقع. خاصية CLR هي مجرد غلاف حول الكامنة DependencyProperty. غالبًا ما يتحسن WPF عن طريق الاتصال GetValue و SetValue مباشرة. إذا كنت بحاجة إلى منطق مخصص للتنفيذ ، فاستخدم بيانات تعريف DependencyProperty.

نصائح أخرى

بعد هذه القضية كلفني بعض الوقت:

لأولئك منكم الذين لديهم نفس المشكلة ، ولكن - مثلي - لا ترى الحل في الإجابة أعلاه:

لدعم ميراث datacontext ، يجب اشتقاق الفئة المخصصة (السياق في هذه الحالة) الإطار عوضا عن الاعتماد. هذا كل شئ.

مارك

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