开发手册 欢迎您!
软件开发者资料库

MVVM - 连接视图

MVVM连接视图 - 从简单和简单的步骤学习MVVM,从基本到高级概念,包括简介,优点,责任,第一个应用程序,连接视图,连接ViewModel,WPF数据绑定,WPF数据模板,View和ViewModel通信,层次结构和导航,验证,依赖注入,事件,单元测试,框架,面试问题。

在本章中,我们将介绍可以将您的视图连接到ViewModel的不同方法.首先,让我们看看View第一个构造,我们可以在XAML中声明它.正如我们在上一章中看到的那样,我们从主窗口连接了一个视图.现在我们将看到其他方法来连接视图.

我们将在本章中使用相同的示例.以下是相同的Model类实现.

using System.ComponentModel;namespace MVVMDemo.Model {    public class StudentModel {}    public class Student : INotifyPropertyChanged {       private string firstName;       private string lastName;      public string FirstName {          get { return firstName; }         set {             if (firstName != value) {                firstName = value;                RaisePropertyChanged("FirstName");               RaisePropertyChanged("FullName");             }          }       }      public string LastName {         get { return lastName; }          set {             if (lastName != value) {                lastName = value;                RaisePropertyChanged("LastName");               RaisePropertyChanged("FullName");             }          }       }      public string FullName {          get {             return firstName + " " + lastName;          }       }      public event PropertyChangedEventHandler PropertyChanged;      private void RaisePropertyChanged(string property) {          if (PropertyChanged != null) {             PropertyChanged(this, new PropertyChangedEventArgs(property));          }       }    } }

这是ViewModel类的实现.这次在默认构造函数中调用LoadStudents方法.

using MVVMDemo.Model; using System.Collections.ObjectModel;namespace MVVMDemo.ViewModel{    public class StudentViewModel {       public StudentViewModel() {          LoadStudents();       }       public ObservableCollection Students {          get;          set;       }      public void LoadStudents() {          ObservableCollection students = new ObservableCollection();         students.Add(new Student { FirstName = "Mark", LastName = "Allain" });          students.Add(new Student { FirstName = "Allen", LastName = "Brown" });          students.Add(new Student { FirstName = "Linda", LastName = "Hamerski" });          Students = students;       }    }}

无论视图是窗口,用户控件还是页面,解析器通常都是最好的从下到上.它在遇到每个元素时调用默认构造函数.构建视图有两种方法.您可以使用它们.

  • 查看XAML中的第一个构造

  • 查看第一个构造代码隐藏

在XAML中查看第一个构造

一种方法是简单地将ViewModel添加为嵌套元素在DataContext属性的setter中,如下面的代码所示.

     

这是完整的View XAML文件.

                                                                                                                                                                                                                      

查看代码隐藏中的第一个构造

另一种方法是,您可以通过简单构建获得View第一个构造通过在实例中设置DataContext属性,视图模型自己在View的代码中.

通常,DataContext属性是在构造函数方法中设置的,但你也可以推迟构造直到视图的Load事件触发.

using System.Windows.Controls;namespace MVVMDemo.Views {    ///        /// Interaction logic for StudentView.xaml    ///     public partial class StudentView : UserControl {       public StudentView() {          InitializeComponent();          this.DataContext = new MVVMDemo.ViewModel.StudentViewModel();       }    } }

在代码隐藏而不是XAML中构建视图模型的一个原因是View模型构造函数接受参数,但XAML解析只能在默认构造函数中定义构造元素.

现在,在这种情况下,View的XAML文件将如下面的代码所示./p>

                                                                                                                                                                                    

您可以在MainWindow中声明此View,如MainWindow.XAML文件所示.

                

编译并执行上述代码后,您将在主窗口中看到以下输出.

连接视图主窗口

我们建议您逐步执行上述示例,以便更好地理解