INotifyProperty MVVM Prism mvvmlight

一开始是由MVVM INotifyProperty Prism mvvmlight这些零散的概念引发的思考。这些概念都学过,z在WPF可能会常用,但是理解的较为混乱,这里加以简单梳理一下。

0、关系

数据绑定基本上都需要这个INotifyProperty接口。在WPF中一般会用MVVM模式进行开发,如果自己手动实现MVVM模式进行开发,会几乎避免不了的使用INotifyProperty和ICommand来实现。而如果你想用框架来实现,如使用Prism和MVVMLight,这时就无需自己手动使用使用INotifyProperty和ICommand,因为框架都对他们进行了封装。
Prism中直接继承:BindableBase
MvvMlight直接继承:ViewModelBase

1、MVVM

MVVM是Model-View-ViewModel的简写,是软件设计模式。什么是设计模式?设计模式是一套经过分类编目的、代码设计经验的总结,可重用代码、保证代码可靠性、程序的重用性。

2、INotifyProperty

INotifyProperty是.net平台上,命名空间为System.ComponentModel的接口。
在这里插入图片描述

3、Prism

Prism是一个开源的、模块化的、可扩展的框架,用于构建.NET平台上的现代化、可测试和可维护的应用程序,包括WPF (Windows Presentation Foundation)、Xamarin.Forms和UWP (Universal Windows Platform)等。

4、MVVMLight

MVVMLight是另一个流行的开源MVVM(Model-View-ViewModel)框架,用于构建基于.NET的应用程序。它提供了一组工具、类和模式,帮助简化和加速MVVM模式下的应用程序开发。

5、具体的

5.1 WPF直接使用INotifyProperty(3步)

//界面 view
 <Grid Name="testGrid">
        <TextBox x:Name="textBoxText"  Text="{Binding Path=Name}"   HorizontalAlignment="Left" Height="23" Margin="607,230,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120">
        </TextBox>  
</Grid>
//model
 using System.ComponentModel;
 public class Person : INotifyPropertyChanged
    {
    
    
        private string _name="zhang";
        public string Name
        {
    
    
            set
            {
    
    
                _name = value;
                if (PropertyChanged != null)//有改变
                {
    
    
                    PropertyChanged(this, new PropertyChangedEventArgs("Name"));//对Name进行监听
                }
            }
            get {
    
     return _name; }
        }
        public event PropertyChangedEventHandler PropertyChanged ;
       
    }
//view model
private Person p1 = new Person();
private void button_Click_1(object sender, RoutedEventArgs e)
{
    
    
  this.DataContext = p1;//绑定数据
  p1.Name = "李四";
}

5.2 WPF自己封装使用INotifyProperty(4步)

//建立BindingBase类
    using System.ComponentModel;
    public class BindBase : INotifyPropertyChanged
    {
    
    
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnProppertyChanged(string propertyname)
        {
    
    
            PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyname));
        }
    }
//界面 view
 <Grid Name="testGrid">
        <TextBox x:Name="textBoxText"  Text="{Binding Path=Name}"   HorizontalAlignment="Left" Height="23" Margin="607,230,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120">
        </TextBox>  
</Grid>
//model
    public class Person : BindBase
    {
    
    
        private string _name="zhang";
        public string Name
        {
    
    
            set
            {
    
    
                _name = value; OnProppertyChanged(nameof(Name));
            }
            get {
    
     return _name; }
        }
    }
//view model
private Person p1 = new Person();
private void button_Click_1(object sender, RoutedEventArgs e)
{
    
    
  this.DataContext = p1;//绑定数据
  p1.Name = "李四";
}

5.3 WPF使用Prism实现上述功能(4步)

1、在nuget安装Prism.wpf
在这里插入图片描述
2、

//界面 view
 <Grid Name="testGrid">
        <TextBox x:Name="textBoxText"  Text="{Binding Name}"   HorizontalAlignment="Left" Height="23" Margin="607,230,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120">
        </TextBox>  
</Grid>

3、

//model
public class Person: BindableBase
{
    
    
    private string _name = "zhang";
    public string Name
    {
    
    
        set
        {
    
    
            SetProperty(ref _name, value);
        }
        get {
    
     return _name; }
    }
}

4、

//view model
private Person p1 = new Person();
private void button_Click_1(object sender, RoutedEventArgs e)
{
    
    
  this.DataContext = p1;//绑定数据
  p1.Name = "李四";
}

猜你喜欢

转载自blog.csdn.net/weixin_41487423/article/details/131431363