في WPF كيف يمكنني ربط ViewModel ومختلف XAML عناصر ربط ViewModel هي الطرق ؟
-
03-07-2019 - |
سؤال
لا يمكن ربط عنصر تحكم ListBox مثل هذا:
XAML:
<UserControl x:Class="TestDynamicForm123.Views.ViewCustomers"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Margin="10">
<ListBox ItemsSource="{Binding}"/>
</StackPanel>
</UserControl>
التعليمات البرمجية خلف:
using System.Windows.Controls;
using TestDynamicForm123.ItemTypes;
namespace TestDynamicForm123.Views
{
public partial class ViewCustomers : UserControl
{
public ViewCustomers()
{
InitializeComponent();
DataContext = Customers.GetAll();
}
}
}
عرض النموذج:
using System.Collections.ObjectModel;
namespace TestDynamicForm123.ItemTypes
{
class Customers : ItemTypes
{
protected ObservableCollection<Customer> collection;
public static ObservableCollection<Customer> GetAll()
{
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
customers.Add(new Customer() { FirstName = "Jay", LastName = "Anders", Age = 34 });
customers.Add(new Customer() { FirstName = "Jim", LastName = "Smith", Age = 23 });
customers.Add(new Customer() { FirstName = "John", LastName = "Jones", Age = 22 });
customers.Add(new Customer() { FirstName = "Sue", LastName = "Anders", Age = 21 });
customers.Add(new Customer() { FirstName = "Chet", LastName = "Rogers", Age = 35 });
customers.Add(new Customer() { FirstName = "James", LastName = "Anders", Age = 37 });
return customers;
}
}
}
ولكن كيف "تحريكه لأعلى مستوى" حتى أستطيع أن في التعليمات البرمجية خلف ربط العملاء نفسها داخل XAML ربط العملاء أساليب مختلفة, مثلاGetAll() عن ListBox و GetBest() على عنصر تحكم آخر ، وما إلى ذلك ؟
حاولت ذلك مع بناء الجملة التالي في التعليمات البرمجية:
DataContext = new Customers();
و هذين جمل في XAML ولكن لا تعمل:
<ListBox ItemsSource="{Binding GetAll}"/> (returns blank ListBox)
<ListBox ItemsSource="{Binding Source={StaticResource GetAll}}"/> (returns error)
المحلول
تحتاج إلى استخدام ObjectDataProvider
إلى ربط الطرق ، ولكن ينبغي أن يكون الاستثناء وليس القاعدة.عادة VM فقط فضح خصائص ربط ، بما في ذلك الممتلكات التي يعرض جميع الجهات Customer
s.
نصائح أخرى
تحتاج إلى إنشاء نموذج عرض الدرجة (CustomersViewModel) عن وجهة نظركم.CustomersViewModel سوف يعرض البيانات و الأوامر (ICommand واجهة) عن طريق خصائص العرض (ViewCustomers) يمكن ربط.ثم يمكنك تعيين DataContext من ViewCustomers إلى مثيل CustomersViewModel.راجع المقالة MSDN التالي على نموذج عرض-ViewModel نمط في WPF.