一开始是由MVVM INotifyProperty Prism mvvmlight这些零散的概念引发的思考。这些概念都学过,z在WPF可能会常用,但是理解的较为混乱,这里加以简单梳理一下。
数据绑定基本上都需要这个INotifyProperty接口。在WPF中一般会用MVVM模式进行开发,如果自己手动实现MVVM模式进行开发,会几乎避免不了的使用INotifyProperty和ICommand来实现。而如果你想用框架来实现,如使用Prism和MVVMLight,这时就无需自己手动使用使用INotifyProperty和ICommand,因为框架都对他们进行了封装。
Prism中直接继承:BindableBase
MvvMlight直接继承:ViewModelBase
MVVM是Model-View-ViewModel的简写,是软件设计模式。什么是设计模式?设计模式是一套经过分类编目的、代码设计经验的总结,可重用代码、保证代码可靠性、程序的重用性。
INotifyProperty是.net平台上,命名空间为System.ComponentModel的接口。
Prism是一个开源的、模块化的、可扩展的框架,用于构建.NET平台上的现代化、可测试和可维护的应用程序,包括WPF (Windows Presentation Foundation)、Xamarin.Forms和UWP (Universal Windows Platform)等。
MVVMLight是另一个流行的开源MVVM(Model-View-ViewModel)框架,用于构建基于.NET的应用程序。它提供了一组工具、类和模式,帮助简化和加速MVVM模式下的应用程序开发。
//界面 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 = "李四";
}
//建立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 = "李四";
}
//界面 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 = "李四";
}