سؤال

ولدي تحكم المستخدم حيث XAML من السيطرة يمكن ربط الخصائص الملائمة من سياق البيانات الوالدين مثل العادية (سياق البيانات تنتشر في XAML).

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

وهكذا XAML نافذتي والتعليمات البرمجية خلف على حد سواء يمكن رؤية DataContext غير الصفرية.

وبلدي السيطرة التي تنتشر DataContext إلى أن نرى DataContext غير خالية في XAML ولكن ليس في التعليمات البرمجية خلف.

ما هي الطريقة الصحيحة للتعامل مع هذا؟

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

المحلول

وإذا تعذر ذلك إذا كنت بحاجة للتأكد من ما إذا كان يتم تعيين DataContext يمكنك استخدام DataContextChanged

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();

        DataContextChanged += new DependencyPropertyChangedEventHandler(UserControl1_DataContextChanged);
    }

    void UserControl1_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        // You can also validate the data going into the DataContext using the event args
    }
}

ملاحظة أنه لن يدخل UserControl1_DataContextChanged حتى يتم تغيير DataContext من باطل إلى قيمة مختلفة.

ولست متأكدا إذا كان هذا يجيب عن سؤالك ولكن يمكن أن تكون في متناول اليد تماما لاستخدامها في القضايا التصحيح.

نصائح أخرى

وأعتقد أنك فحص "DataContext" في منشئ في UserControl. وسيكون لاغيا في منشئ منذ حسنة تحكم المستخدم بعد تم إنشاؤها أثناء التنفيذ في قانون البناء. ولكن تحقق الخاصية في الحدث المحملة سترون الكائن بشكل صحيح.

public partial class UserControl1
{
    public UserControl1()
    {
        this.InitializeComponent();

        //DataContext will be null here 
        this.Loaded += new RoutedEventHandler(UserControl1_Loaded);
    }

    void UserControl1_Loaded(object sender, RoutedEventArgs e)
    {
        //Check DataContext Property here - Value is not null
    }
}

وأود أن تحقق لمعرفة ما إذا كنت تواجه خطأ ملزم في وقت التشغيل. هذا إضافة إلى مساحة XAML الخاص بك:

xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"

ووتحقق من إطار الإخراج المصحح لرسائل الخطأ ذات الصلة.

وبدلا من ذلك، يمكن أن تظهر لنا رمز أكثر؟

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