في C#، كيف يمكنني تعيين DataContext على طريقة عرض من ViewModel؟

StackOverflow https://stackoverflow.com/questions/1044365

سؤال

أحاول أن ألف رأسي حول MVVM.أفهم الكثير منها، لكني أجد صعوبة في فهم جانب واحد: إعداد سياق البيانات.

أريد إظهار طريقة عرض بكائن معين.لا يستطيع المستخدم تحديد ما هو مرئي، لذلك أحتاج إلى إنشاء العرض في التعليمات البرمجية.بعد ذلك، أريد تعيين DataContext للعرض على كائن (للربط).أحاول عدم وضع التعليمات البرمجية في طريقة العرض لهذا، ولكن View.LayoutRoot.DataContext ليس عامًا.

ماذا ينقصني؟

تحاول تجنب هذا:

public class View
{
    public View(object dataContext)
    {
        InitializeComponent();
        LayoutRoot.DataContext = dataContext;  
    }
}

بشيء مثل هذا:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
هل كانت مفيدة؟

المحلول

لا تنس أن طريقة العرض يجب أن تعرف عن ViewModel، وليس العكس.

لذا، في حالتك، فإن وضع التعليمات البرمجية في ViewModel لإنشاء العرض ليس هو أفضل طريقة.

جوش سميث شرط على MVVM لديه قسم عند تطبيق العرض على ViewModel.ويوصي باستخدام DataTemplates الخاص بـ WPF لتحديد طريقة العرض الخاصة بك في XAML.

نصائح أخرى

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

أيضًا، أؤيد رأي كاميرون - ولا ينبغي لـ View أو ModelView التعامل مع تعيين DataContext.يمكن القيام بذلك بطرق مختلفة (DataTemplate، وحقن التبعية، وفئة منشئ خاصة، ورمز عادي) ولكن عادةً ما يحدث ذلك على مستوى التطبيق.

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