لماذا هذا الرأي غير صحيح ملزم أن هذا ViewModel?
-
03-07-2019 - |
سؤال
أحاول ربط وجهة نظري نظري نموذج دون DataObjectProvider.
على بعد تشغيل التعليمات البرمجية دون خطأ, لكن ListBox هو فارغة.
بقدر ما أستطيع أن أقول, أنا بشكل صحيح:
- تعيين عرض DataContext إلى ViewModel نفسها (
DataContext = new CustomersViewModel();
) - فضح العملاء الكائنات في ViewModel (
public static ObservableCollection<Customer> GetAll()
) - ربط ListBox إلى العملاء الكائنات (
ItemsSource="{Binding GetAll}"
)
ما قطعة صغيرة من جملة أنا في عداد المفقودين هنا ؟
CustomersView.xaml:
<UserControl x:Class="TestDynamicForm123.View.CustomersView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="allCustomersListBox" TargetType="ListBox">
<Setter Property="BorderThickness" Value="0"/>
</Style>
<DataTemplate x:Key="allCustomersDataTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<StackPanel Style="{StaticResource viewWrappingStackPanel}">
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
</StackPanel>
</UserControl>
CustomersView.xaml.cs:
using System.Windows.Controls;
using TestDynamicForm123.ViewModel;
namespace TestDynamicForm123.View
{
public partial class CustomersView : UserControl
{
public CustomersView()
{
InitializeComponent();
DataContext = new CustomersViewModel();
}
}
}
CustomersViewModel.cs:
using System.Collections.ObjectModel;
namespace TestDynamicForm123.ViewModel
{
public class CustomersViewModel
{
public static ObservableCollection<Customer> GetAll()
{
return Customer.GetAll();
}
}
}
العملاء.cs: (نموذج)
using System.Collections.ObjectModel;
namespace TestDynamicForm123.ViewModel
{
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
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;
}
}
}
المحلول
المشكلة هي أن تحاول ربط CustomerViewModel.GetAll () ، عندما GetAll في CustomerViewModel هي دالة ثابتة لا مثيل الملكية.
تغيير وظيفة ثابتة إلى شيء من هذا القبيل (في CustomerViewModel):
public ObservableCollection<Customer> GetAll
{
get { return Customer.GetAll(); }
}
نصائح أخرى
المشكلة هي أن CustomersViewModel
.GetAll()
هو أسلوب ثابت.ملزمة يعمل فقط مع خصائص المثال.يجب أن تتحرك تنفيذ GetAll()
منشئ ثم تعرض مجموعة كمثال الملكية الفئة.
لا تنتمي إلى StackOverflow