In WPF wie kann ich binden an das Ansichtsmodell und habe verschiedene XAML-Elemente auf das Ansichtsmodell Methoden binden?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich kann eine List-Box wie diese binden:

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>

Code-Behind:

using System.Windows.Controls;
using TestDynamicForm123.ItemTypes;

namespace TestDynamicForm123.Views
{
    public partial class ViewCustomers : UserControl
    {
        public ViewCustomers()
        {
            InitializeComponent();

            DataContext = Customers.GetAll();
        }
    }
}

Modell:

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;
        }
    }
}

Aber wie ich „eine Ebene nach oben“, so kann ich in dem Code hinter binden an Kunden selbst und in meiner XAML bindet an Kunden verschiedene Methoden , z.B. GetAll () für eine ListBox und GetBest () für eine andere Steuerung, usw.?

Ich habe versucht, es mit dieser Syntax im Code hinter:

DataContext = new Customers();

Und diese beiden Syntaxen im XAML aber weder Arbeit:

<ListBox ItemsSource="{Binding GetAll}"/> (returns blank ListBox)
<ListBox ItemsSource="{Binding Source={StaticResource GetAll}}"/> (returns error)
War es hilfreich?

Lösung

Sie müssen verwenden ObjectDataProvider Verfahren zu binden, aber das soll eher die Ausnahme als die Regel sein. Normalerweise Ihre VM würde nur aussetzen Eigenschaften, die Sie binden an, darunter eine Eigenschaft, die alle relevanten Customers aussetzt.

Andere Tipps

Sie benötigen einen Blick Modellklasse (CustomersViewModel) für Ihre Ansicht zu erstellen. CustomersViewModel werden die Daten und den Befehl (ICommand-Schnittstelle) über Eigenschaften verfügbar machen, die Ihrer Ansicht nach (ViewCustomers) binden. Sie können dann von Datacontext ViewCustomers auf eine Instanz CustomersViewModel gesetzt. Schauen Sie sich den folgenden MSDN-Artikel auf Model-View-Viewmodel-Mustern in WPF.

WPF Apps mit dem Model-View-Viewmodel Design Muster

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top