WPF MVVM 多个不同Model实例绑定

1.创建WPF应用,并创建如下项目

WPF MVVM 多个不同Model实例绑定_第1张图片

其中Usercontrol要实现命令的绑定,我这里是直接使用Nuget安装System.Windows.Interactivity.WPF这个包。并且引用程序集PresentationCore.dll(不引用该程序集会是的有些我们需要类无法识别,例如CommandManager)。

2.创建控件UserControl。本文只为了完成同一控件类型绑定不同的Model实例,故只简单的写了一个名称和密码框。代码如下:


    
        
            
        
        
            Name:
            
        
        
            Password:
            
        
        
    

3.再主界面添加两个这样的用户控件。


    
        
        
        
        
    

显示如下:

WPF MVVM 多个不同Model实例绑定_第2张图片

分别命名第一个与第二个控件的名称为view1与view2。

3.ModelView的创建

View与ViewModel的构建原理这里就不详细介绍,这里主要是完成绑定不同的Model。直接给出代码

  public class UserVM:INotifyPropertyChanged
    {
        UserModel User = new UserModel();
        public UserVM(UserModel user)
        {
            User = user;
        }
        public string Name
        {
            get { return User.Name; }
            set
            {
                User.Name = value;
                PropertyChanged(this, new PropertyChangedEventArgs(nameof(Name)));
            }
        }
        public string Password
        {
            get { return User.Password; }
            set
            {
                User.Password = value;
                PropertyChanged(this, new PropertyChangedEventArgs(nameof(Password)));
            }
        }
        public ICommand SureClick => new Command(Sure);
        private void Sure()
        {
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

应该能注意到,UserVM的构造函数是需要传入一个Model的,这里就实现了不同的Model构建不同的ViewModel。然后创建一个单例的类来实例化ViewModel:

 public class VMInstance
    {
        private static VMInstance _VMInstance = new VMInstance();
        public UserVM UserVM1 { get; set; } 
        public UserVM UserVM2 { get; set; }
        public VMInstance()
        {
            UserVM1 = new UserVM(Model.ModelInstance.GetVMInstance().UserModel1);
            UserVM2 = new UserVM(Model.ModelInstance.GetVMInstance().UserModel2);
        }
        public static VMInstance GetVMInstance()
        {
            return _VMInstance;
        }
    }

而Model也是用这种方式来实例化:

  public class ModelInstance
    {
        private static ModelInstance _ModelInstance = new ModelInstance();
        public UserModel UserModel1 { get; set; } = new UserModel();
        public UserModel UserModel2 { get; set; } = new UserModel();
        private ModelInstance()
        {
            UserModel1.Name = "qqq";
            UserModel1.Password = "123";
            UserModel2.Name = "yyy";
            UserModel2.Password = "234";
        }
        public static ModelInstance GetVMInstance()
        {
            return _ModelInstance;
        }

4.最终的绑定

直接在MainWidow构造函数那绑定

  public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.view1.DataContext = VMInstance.GetVMInstance().UserVM1;
            this.view2.DataContext = VMInstance.GetVMInstance().UserVM2;
        }
    }

F5运行

WPF MVVM 多个不同Model实例绑定_第3张图片

当然也可以不采用这种方式,你可以通过继承的方式来绑定,获得不一样的Viewmodel拿来绑定View。


你可能感兴趣的:(C#)