في C#، كيف يمكنني تعيين DataContext على طريقة عرض من ViewModel؟
-
20-08-2019 - |
سؤال
أحاول أن ألف رأسي حول 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;
}
}
نصائح أخرى
إذا كنت تستخدم عنصر تحكم XAML أو نافذة (وهو ما يجب أن يكون عليه الحال إذا كنت تستخدم MVVM)، فإن LayoutRoot (الشبكة افتراضيًا) يكون عامًا.في المثال الخاص بك، يمكنك استخدام فئة عادية فقط للعرض، لذلك من الصعب معرفة ما يحدث.
أيضًا، أؤيد رأي كاميرون - ولا ينبغي لـ View أو ModelView التعامل مع تعيين DataContext.يمكن القيام بذلك بطرق مختلفة (DataTemplate، وحقن التبعية، وفئة منشئ خاصة، ورمز عادي) ولكن عادةً ما يحدث ذلك على مستوى التطبيق.