当前位置: 首页 > news >正文

要在 WPF 中实现数据表对应实体的属性与 UI 控件的双向绑定,并支持修改通知和 UI 自动更新

没有通知功能的属性改成有通知功能的属性

/// </summary>
[MfTable("Recipe")]
public class RecipeModel : BaseModelExtendIdAndName<int>
{/// <summary>/// 类型 RecipeTypeEnum/// </summary>public int Type { get; set; }
} 

要在 WPF 中实现数据表对应实体的属性与 UI 控件的双向绑定,并支持修改通知和 UI 自动更新,需要让模型类实现属性更改通知接口。以下是具体实现步骤:

1. 让模型类实现INotifyPropertyChanged接口

WPF 的绑定机制依赖INotifyPropertyChanged接口来监听属性变化。由于你的RecipeModel继承自BaseModelExtendIdAndName<int>,建议在基类中实现该接口(若基类未实现),或在子类中扩展实现。

        增加一个类 BaseModelExtendIdAndNameNotify,这个类继续继承BaseModelExtendIdAndName类,并实现INotifyPropertyChanged 接口,再实现通知方法

/// <summary>
/// 带通知的 基类
/// </summary>
/// <typeparam name="idType"></typeparam>
public class BaseModelExtendIdAndNameNotify<idType> : BaseModelExtendIdAndName<idType>, INotifyPropertyChanged
{// 实现INotifyPropertyChanged接口public event PropertyChangedEventHandler PropertyChanged;// 触发属性更改通知的保护方法protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}
// 子类RecipeModel
[MfTable("Recipe")]
public class RecipeModel : BaseModelExtendIdAndNameNotify<int>//BaseModelExtendIdAndName<int>
{private int _type; // 私有字段存储值/// <summary>/// 类型 RecipeTypeEnum/// </summary>public int Type { get => _type; set {if (_type != value) // 避免不必要的通知{_type = value;OnPropertyChanged(); // 触发通知(自动获取属性名)}} }
}

2. 在 XAML 中绑定 UI 控件

将 UI 控件(如TextBoxComboBox等)的TextSelectedValue属性与RecipeModel.Type绑定,并设置Mode=TwoWay(双向绑定,默认对输入控件有效)。

示例 XAML(假设 DataContext 已设置为 RecipeModel 实例):
<!-- 例如:使用TextBox绑定Type -->
<TextBox Text="{Binding Type, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /><!-- 或使用ComboBox绑定(若Type对应枚举值) -->
<ComboBox ItemsSource="{Binding Source={StaticResource RecipeTypeEnumValues}}" SelectedValue="{Binding Type, Mode=TwoWay}" DisplayMemberPath="Description" SelectedValuePath="Value"
/>
  • 说明
    • UpdateSourceTrigger=PropertyChanged:输入时立即更新数据源(TextBox 默认是失去焦点时更新)。
    • Type对应枚举(RecipeTypeEnum),建议在 ComboBox 中绑定枚举值(可通过 ObjectDataProvider 或代码生成枚举列表)。

3. 设置 DataContext

确保 UI 控件所在的容器(如 Window、UserControl)的DataContextRecipeModel的实例,绑定才能生效。

示例(在 Window 的构造函数中):
public MainWindow()
{InitializeComponent();// 设置数据上下文为RecipeModel实例DataContext = new RecipeModel(); 
}

实现原理

  • Type属性的值通过代码修改时,set访问器中调用OnPropertyChanged(),触发PropertyChanged事件。
  • WPF 绑定引擎监听该事件,自动更新 UI 控件的显示值。
  • 当 UI 控件的值被用户修改时(如输入文本),双向绑定会自动更新Type属性的 值(触发set访问器)。

通过以上步骤,即可实现Type属性与 UI 的双向绑定及自动更新。核心是实现INotifyPropertyChanged接口并在属性变化时触发通知

http://www.dtcms.com/a/579271.html

相关文章:

  • v4l2 subdev 设备节点和属性创建过程
  • (论文速读)基于图像堆栈的低频超宽带SAR叶簇隐蔽目标变化检测
  • 懒人之家网站模板做网站的实践报告
  • 网站建设去哪网站注册商标
  • 垂直越权和水平越权是什么
  • 过关斩将编程题
  • 做自己看视频的网站wordpress网站备份
  • html制作手机网站做网络课堂的平台有哪些网站
  • 进程一、进程基本概念
  • 供求信息网站开发背景计算机软件开发培训机构
  • 如何做照片ppt模板下载网站微信公众平台开发者工具
  • 营销型网站建设细节东莞市建设厅官方网站
  • 网站开发合同技术目标专门做简历的网站软件
  • 4G车联网终端TBOX知识详解
  • 郑州本地做团购的网站wordpress获取自定义文章分类名
  • 自己做的网站别人怎么上网找到合作在惠州做网站
  • 中国建设银行网站密码是什么做淘宝电商比较厉害的网站
  • RFID 技术赋能汽车零件装配线:智能化升级的关键引擎
  • 1、prometheus基础理论
  • 设计社交网站手机可以建网站吗
  • 响应式网站要多久手机站点cn
  • 网站鼠标悬停动态效果古田路9号设计网站
  • 突破 GEO 优化瓶颈:孟庆涛引领的 AI 时代营销新范式
  • 网站模版编辑器企业简介范文
  • 基于Vue的智慧楼宇报修平台设计与实现066z15wb(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • php网站开发套模板步骤张家界城乡建设网站
  • 一元云购网站建设教程wordpress侧边栏插件
  • 惠州城市建设建筑网站cms网站开发网站模板
  • 18年手机网站加强机关网站内容建设
  • 村镇建设年度报表登录网站百度搜索引擎官网