Подтвердить что ты не робот

Как View знает, что ViewModel использовать в WPF?

Может кто-нибудь объяснить, как связаны View и ViewModel? Я не могу найти нигде xaml или xaml.cs для представления, ссылающегося на ViewModel, и ничего в файле ViewModel.cs, который ссылается на представление, но они каким-то образом связаны и привязывают членов из ViewModel к работе View,

Кроме того, в конструкторе каждого есть только InitializeComponent для представления и базовый конструктор для ViewModel (без объявления/определения View).

Спасибо!

4b9b3361

Ответ 1

Здесь есть различные варианты.

Что-то должно установить View DataContext как экземпляр ViewModel. Здесь есть много вариантов:

  • Это можно сделать непосредственно в xaml (просмотр просто экземпляров ViewModel напрямую).
  • Это можно сделать в конструкторе вида (this.DataContext = new MyViewModel();)
  • Это можно обрабатывать с помощью DataTemplate
  • "Координирующий" класс может связывать их вместе (т.е. отдельный класс "презентатор" может построить оба и установить DataContext соответственно)

Наиболее распространенными являются либо просмотр представления виртуальной машины в xaml (первый вид), либо все, что основано на ориентированной на ViewModel точке зрения, и WPF автоматически создает представление на основе связанной виртуальной машины (ViewModel-первых).

Первый подход - это то, что используется множеством наборов инструментов, таких как MVVM Light. Последний подход - это то, что я использовал в моей блоге

Ответ 2

"Чистый" способ подключения представлений к моделям просмотров будет...

Когда вы создаете представления для каждого представления, установите его DataSource в свою модель представления:

например.

public class App
{
    private void OnAppStart()
    {
        var model = new MainModel();
        var vm = new MainVM();
        var view = new MainWindow();

        vm.Model = model;
        view.DataSource = vm;

        view.Show();
    }
}

Когда модель, которую вы просматриваете, изменяется, обновите VM:

public class MainVM
{
    private void OnSelectedModelItemChanged()
    {
        this.SelectedItem = new ItemVM();
        this.SelectedItem.Model = this.SelectedModelItem;
    }
}

И используйте шаблоны данных, чтобы сделать вид, выберите правильные подвыборы для каждой виртуальной машины.

Ответ 3

В представлении содержится объект класса модели представления в xaml.

Функция InitializeComponent создает все элементы управления на странице, устанавливает стили и т.д.