سؤال

أحاول ربط وجهة نظري نظري نموذج دون 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() منشئ ثم تعرض مجموعة كمثال الملكية الفئة.

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