WPF MVVM双向通信 数据模型绑定 简单实例

MVVM
456
WPF
MVVM
双向通信
数据模型绑定
  1. 新建一个WPF 程序项目
  2. 引用命名空间 using System.ComponentModel;
  3. 创建测试实体 TestModel 继承 INotifyPropertyChanged 并实现接口
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
  1. 添加一个自定义通知方法
public void NotifyPropertyChanged(string propertyName)
{
	if (PropertyChanged != null)
	{
		PropertyChanged(this, new 
		System.ComponentModel.PropertyChangedEventArgs(propertyName));
    }
}

这样一来 通知模块通知方法就实现了

  1. 添加一个测试属性 Name
private string _name;
public string Name
{
	get { return _name; }
	set {
             if (_name != value)
			 {
                  _name = value;
                  NotifyPropertyChanged("Name");//通知属性值已变更
             }
		}
}

这样数据模型这块就搞定了

  1. 为了后面比较直观的看到效果 创建一个TextBox以及一个Button 前者用来编辑,后者用来显示当前属性值
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
   		<TextBox VerticalAlignment="Center" 
			HorizontalAlignment="Center" 
			Width="200"  
			Padding="10" Margin="0 20 0 0"  
			Name="TestTextBox"  
			Text="{Binding Path=Name,Mode=TwoWay}"/>
	 	
        <Button Margin="0 5 0 0" Padding="5" Content="显示实体Name值"  Name="ShowNameValue" Click="ShowNameValue_Click" />
StackPanel>

后台代码实现:

public TestModel testModel;
public MainWindow()
{
     InitializeComponent();
     testModel = new TestModel()
     {
         Name = "小明明"
     };
     TestTextBox.DataContext = testModel;
 }

private void ShowNameValue_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show(testModel.Name);
}

结合上面其实 就明白了 这里

<TextBox Padding="10" Margin="0 20 0 0"	 Name="TestTextBox" Text="" />  

如上代码中的TextBox的属性Path=Name这里的Name 其实就是映射的TestModel 的Name属性

此时修改文本框内容 就会直接体现更新到testModel 的Name属性值

反之后台修改testModel的Name值时 前端也会相应更新,实际使用可以节省很多参数的赋值,语法糖就是香

WPF实现窗体接收鼠标拖拽的文件例子
一次使用AutoResetEvent的经历:在Task并发环境下导致UI线程卡死 内存一直上涨
WPF桌面程序开发怎么实现鼠标窗体穿透点击桌面
在.NET CORE\.NET 5 下WPF如何实现托盘图标功能
WPF中某一个控件绑定其他指定UI控件的属性值
.NET 5 WPF 如何开启控制台界面用于实时输出日志
KnockoutJS用法 html+js实现mvvm
.NET程序系统托盘运行出现多个同样的托盘图标的解决方法
Windows桌面开发优秀的WPF界面开源UI组件 MahApps.Metro
WPF 设置程序不允许同一类程序多开进程
WPF引用CommunityToolkit.Mvvm实现属性变动双向绑定的简单例子
WPF使用popup控件实现弹出式提示
暂无相关内容...
C#+WPF实现模仿实现的网易云音乐客户端源码
WPF实现的自定义工作大日历排班Calendar控件模板的例子源码
wpf实现大屏幕弹幕播放效果特效源码新手可参考下.rar
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
WPF实现读取USB摄像头实时视频展示以及导出实时截图的C#源码例子
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删