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

a市最牛的网站WordPress付费阅读文章

a市最牛的网站,WordPress付费阅读文章,网上工伤做实网站,做效果图常用的网站有哪些目录 1. MvvmLight 框架准备 2. MvvmLight 中的相关基类 3. MvvmLight 中的数据绑定与通知 a. 核心功能 b. 关键方法与属性 c. 完整示例 d. 高级用法 4. MvvmLight 中的命令对象 a. 命令对象的作用 b. 核心接口#xff1a;ICommand c. MvvmLight 中的 RelayCommand…目录 1. MvvmLight 框架准备 2. MvvmLight 中的相关基类 3. MvvmLight 中的数据绑定与通知 a. 核心功能 b. 关键方法与属性 c. 完整示例 d. 高级用法 4. MvvmLight 中的命令对象 a. 命令对象的作用 b. 核心接口ICommand c. MvvmLight 中的 RelayCommand d. 动态更新命令的可执行状态 e. 高级用法 5. Messenger 对象使用 a. Messenger 的核心作用 b. MvvmLight 中的 Messenger 实现 c. 基本使用场景 d. 高级用法 6. DispatcherHelper 对象使用 7. SimpleIoc 对象使用 a. SimpleIoc 的核心作用 b. 核心方法与属性 c. 基本使用步骤 d. 高级用法 e. 与 ViewModelLocator 结合使用 1. MvvmLight 框架准备 作用: 快速搭建 MVVM 架构的应用程序简化数据绑定、命令和消息传递。步骤: 通过 NuGet 安装 MvvmLightLibs 包。 2. MvvmLight 中的相关基类 核心基类: ViewModelBase: ViewModel 基类实现 INotifyPropertyChanged。 public class MainViewModel : ViewModelBase {private string _name;public string Name{get _name;set Set(ref _name, value); // 自动触发 PropertyChanged} } ObservableObject: 轻量级可观察对象。RelayCommand: 命令对象基类。 3. MvvmLight 中的数据绑定与通知 a. 核心功能 ViewModelBase 继承自 ObservableObject并实现了 INotifyPropertyChanged 接口主要负责 属性变更通知当 ViewModel 的某个属性值发生变化时自动通知 UI 更新。简化代码通过 Set 方法简化属性定义避免手动触发 PropertyChanged 事件。设计模式支持提供静态属性 IsInDesignMode用于区分代码是在设计时如 Visual Studio 设计器还是运行时执行。 b. 关键方法与属性 (1) SetT(ref T field, T value, [CallerMemberName] string propertyName null) 作用在属性的 set 方法中调用此方法自动比较新旧值若不同则更新字段并触发 PropertyChanged 事件。示例 private string _name; public string Name {get _name;set Set(ref _name, value); // 自动触发通知 } (2)RaisePropertyChanged(string propertyName) 作用手动触发某个属性的 PropertyChanged 事件。场景当某个属性的值依赖于其他属性时手动通知 UI 更新。 public string FullName ${FirstName} {LastName};private string _firstName; public string FirstName {get _firstName;set{Set(ref _firstName, value);RaisePropertyChanged(nameof(FullName)); // 通知 FullName 属性变化} } (3) IsInDesignMode 作用静态属性判断当前代码是否在设计器如 Visual Studio 或 Blend中运行。用途在设计时提供假数据避免调用真实服务或数据库。 public class MainViewModel : ViewModelBase {public MainViewModel(){if (IsInDesignMode)Name Design Mode Sample; // 设计器显示假数据elseLoadRealData(); // 运行时加载真实数据} } c. 完整示例 using GalaSoft.MvvmLight;public class UserViewModel : ViewModelBase {private string _userName;private int _age;public string UserName{get _userName;set Set(ref _userName, value);}public int Age{get _age;set Set(ref _age, value);}// 计算属性依赖其他属性public string UserInfo ${UserName} (Age: {Age});// 当 UserName 或 Age 变化时手动通知 UserInfo 更新protected override void OnPropertyChanged(string propertyName null){base.OnPropertyChanged(propertyName);if (propertyName nameof(UserName) || propertyName nameof(Age))RaisePropertyChanged(nameof(UserInfo));} } d. 高级用法 1批量通知多个属性 通过 RaisePropertyChanged(null) 或指定空字符串通知所有属性更新慎用可能影响性能 public void ResetAllProperties() {_userName Default;_age 0;RaisePropertyChanged(); // 通知所有属性更新 } (2) 继承与扩展 可继承 ViewModelBase 并添加通用逻辑如日志记录、验证 public abstract class CustomViewModelBase : ViewModelBase {protected void LogPropertyChange(string propertyName){Debug.WriteLine($属性 {propertyName} 已更新);}public override void RaisePropertyChanged(string propertyName null){base.RaisePropertyChanged(propertyName);LogPropertyChange(propertyName);} } 4. MvvmLight 中的命令对象 a. 命令对象的作用 解耦 UI 与业务逻辑将用户操作如点击按钮映射到 ViewModel 的方法。控制可执行状态根据条件动态启用或禁用 UI 元素例如按钮的 IsEnabled。支持参数传递允许从 UI 传递参数到 ViewModel如选中项的 ID。 b. 核心接口ICommand 所有命令对象均实现 System.Windows.Input.ICommand 接口其定义如下 public interface ICommand {event EventHandler CanExecuteChanged; // 通知命令可执行状态变化bool CanExecute(object parameter); // 判断命令是否可执行void Execute(object parameter); // 执行命令逻辑 } c. MvvmLight 中的 RelayCommand MvvmLight 提供 RelayCommand 和 RelayCommandT 类简化了 ICommand 的实现。 (1) 基本用法无参数 public class MainViewModel : ViewModelBase {public RelayCommand SaveCommand { get; }public MainViewModel(){// 初始化命令绑定方法 可执行条件SaveCommand new RelayCommand(SaveData, CanSave);}private void SaveData(){// 保存逻辑}private bool CanSave(){return !string.IsNullOrEmpty(Name); // 仅当 Name 非空时按钮可用} } (2) 支持参数传递RelayCommandT public RelayCommandstring FilterCommand { get; }public MainViewModel() {FilterCommand new RelayCommandstring(param ApplyFilter(param), param !string.IsNullOrEmpty(param)); }private void ApplyFilter(string keyword) {// 根据关键字过滤数据 } d. 动态更新命令的可执行状态 (1) 手动触发更新 当 CanExecute 依赖的属性变化时调用 RelayCommand 的 RaiseCanExecuteChanged 方法 private string _name; public string Name {get _name;set{Set(ref _name, value);SaveCommand.RaiseCanExecuteChanged(); // 触发重新检查 CanSave} } (1) 自动触发更新 利用 ViewModelBase 的 Set 方法自动触发属性变更通知无需手动调用 RaiseCanExecuteChanged private string _name; public string Name {get _name;set Set(ref _name, value); // Set 方法已自动触发 PropertyChanged }// CanSave 方法中依赖 Name 属性 private bool CanSave() !string.IsNullOrEmpty(Name); e. 高级用法 (1) 异步命令 直接在命令中执行异步操作时需注意线程安全通过 DispatcherHelper public RelayCommand LoadDataCommand { get; }public MainViewModel() {LoadDataCommand new RelayCommand(async () await LoadDataAsync()); }private async Task LoadDataAsync() {try{IsLoading true;var data await _dataService.GetData();// 更新 UI确保在 UI 线程DispatcherHelper.CheckBeginInvokeOnUI(() DataList data);}finally{IsLoading false;} } (2) 复合命令 将多个命令组合成一个逻辑操作 public RelayCommand SubmitAllCommand { get; }public MainViewModel() {SubmitAllCommand new RelayCommand(() {SaveCommand.Execute(null);LogCommand.Execute(null);}, () SaveCommand.CanExecute(null) LogCommand.CanExecute(null)); } (3) 命令的泛型约束 public RelayCommandint DeleteItemCommand { get; }public MainViewModel() {DeleteItemCommand new RelayCommandint(id DeleteItem(id), id id 0); }private void DeleteItem(int itemId) {// 删除指定 ID 的项 } 5. Messenger 对象使用 在 MVVM 模式 中Messenger 是一个用于实现 松耦合通信 的核心组件尤其在 MvvmLight 框架 中被广泛使用。它允许不同组件如 ViewModel、View、服务之间通过消息进行通信而无需直接引用彼此从而降低依赖、提升代码可维护性。 a. Messenger 的核心作用 解耦组件通信组件无需持有对方引用通过消息订阅/发布机制交互。跨层级传递数据例如从子 ViewModel 通知父 ViewModel或跨页面传递状态。支持复杂场景如广播通知、请求-响应模式、事件聚合等。 b. MvvmLight 中的 Messenger 实现 MvvmLight 的 Messenger 类是一个静态单例Messenger.Default提供消息的注册、发送和注销功能。其核心方法如下 方法 作用 RegisterTMessage(object recipient, ActionTMessage action) 订阅类型为 TMessage 的消息。recipient 为接收者标识通常为 this 。 SendTMessage(TMessage message) 发送一条 TMessage 类型的消息所有订阅者会收到通知。 Unregister(object recipient) 注销某个接收者的所有消息订阅避免内存泄漏。 c. 基本使用场景 (1) 发送简单通知消息 场景ViewModel A 完成数据加载后通知 ViewModel B 刷新界面。 发送消息方 // 发送一个无参数通知 Messenger.Default.Send(new NotificationMessage(DataLoaded)); 接收消息方ViewModel B public ViewModelB() {// 注册接收 NotificationMessage 类型的消息Messenger.Default.RegisterNotificationMessage(this, message {if (message.Notification DataLoaded){RefreshData();}}); } (2) 传递数据对象 场景用户选择某条数据后跨页面传递选中项。 定义消息类型 public class ItemSelectedMessage {public int ItemId { get; set; }public ItemSelectedMessage(int id) ItemId id; } 发送方 // 用户选择某项后发送消息 Messenger.Default.Send(new ItemSelectedMessage(selectedItem.Id)); 接收方 Messenger.Default.RegisterItemSelectedMessage(this, message {LoadItemDetails(message.ItemId); // 根据 ItemId 加载详情 }); d. 高级用法 (1) 消息令牌Token 作用区分相同消息类型的不同用途避免消息冲突。 发送带令牌的消息 // 发送消息时指定令牌 Messenger.Default.Send(new NotificationMessage(UpdateChart), ChartToken // 令牌标识 ); 接收指定令牌的消息 Messenger.Default.RegisterNotificationMessage(this, message UpdateChartData(), ChartToken // 仅接收带有此令牌的消息 ); (2) 泛型消息 场景传递强类型数据避免类型转换。 定义泛型消息 public class GenericMessageT {public T Content { get; }public GenericMessage(T content) Content content; } 发送泛型消息 var data new ListUser(); Messenger.Default.Send(new GenericMessageListUser(data)); 接收泛型消息 Messenger.Default.RegisterGenericMessageListUser(this, message {UserList message.Content; // 直接获取 ListUser }); (3) 双向通信请求-响应模式 场景ViewModel A 请求数据ViewModel B 响应返回结果。 发送请求消息 public class DataRequestMessage {public Actionstring Callback { get; set; } // 定义回调委托 }// 发送请求并注册回调 Messenger.Default.Send(new DataRequestMessage { Callback response HandleResponse(response) }); 接收请求并响应 Messenger.Default.RegisterDataRequestMessage(this, message {var data FetchDataFromService(); // 获取数据message.Callback?.Invoke(data); // 执行回调 }); 6. DispatcherHelper 对象使用 作用: 在非 UI 线程更新 UI。初始化: DispatcherHelper.Initialize(); // 在 App.xaml.cs 中调用 使用: Task.Run(() {// 后台线程操作DispatcherHelper.CheckBeginInvokeOnUI(() {// 更新 UI 元素StatusText Processing...;});}); 7. SimpleIoc 对象使用 SimpleIoc 是 MvvmLight 框架中提供的一个轻量级依赖注入Dependency Injection, DI容器用于管理应用程序中各个组件如 ViewModel、服务、数据源的依赖关系。它通过 控制反转IoC 和 依赖注入 机制帮助开发者实现代码解耦、提高可测试性和可维护性。 a. SimpleIoc 的核心作用 解耦组件依赖将类的依赖关系从代码中抽离通过容器统一管理。单例生命周期管理默认以单例模式提供实例避免重复创建对象。简化实例获取通过接口或类型直接获取已注册的实例。支持构造函数注入自动解析构造函数参数完成依赖注入。 b. 核心方法与属性 以下是 SimpleIoc 的常用方法及其功能 方法/属性 作用 RegisterTInterface, TClass() 注册接口 TInterface 和其实现类 TClass 。 RegisterTClass() 直接注册类型 TClass 无接口。 GetInstanceT() 获取类型 T 的实例已注册的接口或类。 ContainsCreatedT() 检查类型 T 的实例是否已被创建。 Reset() 重置容器清空所有注册和实例用于测试或重新初始化。 IsRegisteredT() 检查类型 T 是否已注册。 c. 基本使用步骤 (1) 注册服务与 ViewModel 在应用程序启动时如 ViewModelLocator 或 App.xaml.cs 中注册所有依赖项 public class ViewModelLocator {public ViewModelLocator(){// 注册服务接口 实现类SimpleIoc.Default.RegisterIDataService, DataService();// 注册 ViewModel无接口SimpleIoc.Default.RegisterMainViewModel();}// 提供 ViewModel 实例的公共属性public MainViewModel Main SimpleIoc.Default.GetInstanceMainViewModel(); } (2) 获取实例 通过 GetInstanceT 方法获取已注册的实例 // 获取 ViewModel 实例 var mainVM SimpleIoc.Default.GetInstanceMainViewModel();// 获取服务实例 var dataService SimpleIoc.Default.GetInstanceIDataService(); (3) 构造函数注入 当注册的类如 ViewModel依赖其他服务时SimpleIoc 会自动解析构造函数参数 public class MainViewModel : ViewModelBase {private readonly IDataService _dataService;// 构造函数依赖注入自动传入已注册的 IDataService 实例public MainViewModel(IDataService dataService){_dataService dataService;} } d. 高级用法 (1) 单例模式 vs. 瞬时模式 单例模式默认整个应用程序生命周期内只创建一个实例。 // 默认单例模式 SimpleIoc.Default.RegisterIDataService, DataService(); 瞬时模式每次调用 GetInstance 时创建新实例。 SimpleIoc.Default.RegisterIDataService, DataService(createInstanceImmediately: false); var service SimpleIoc.Default.GetInstanceIDataService(); // 每次返回新实例 (2) 手动指定实例 允许直接注册一个已存在的对象实例 var logger new FileLogger(); SimpleIoc.Default.RegisterILogger(() logger); // 注册现有实例 (3) 依赖覆盖 在测试中可以替换实现类以注入 Mock 对象 // 生产环境注册真实服务 SimpleIoc.Default.RegisterIDataService, DataService();// 测试环境覆盖为 Mock 服务 SimpleIoc.Default.UnregisterIDataService(); SimpleIoc.Default.RegisterIDataService, MockDataService(); e. 与 ViewModelLocator 结合使用 ViewModelLocator 是 MvvmLight 中用于集中管理 ViewModel 的类通常与 SimpleIoc 配合使用通过 XAML 绑定 ViewModel。 (1) 定义 ViewModelLocator public class ViewModelLocator {public ViewModelLocator(){// 注册服务和 ViewModelSimpleIoc.Default.RegisterIDataService, DataService();SimpleIoc.Default.RegisterMainViewModel();}// 暴露 ViewModel 属性供 XAML 绑定public MainViewModel Main SimpleIoc.Default.GetInstanceMainViewModel(); } (2) 在 XAML 中声明资源 在 App.xaml 中合并 ViewModelLocator Application.ResourcesResourceDictionaryvm:ViewModelLocator x:KeyLocator //ResourceDictionary /Application.Resources (3) 在 View 中绑定 ViewModel Window DataContext{Binding Main, Source{StaticResource Locator}}!-- UI 元素绑定到 MainViewModel 的属性 -- /Window
http://www.zqtcl.cn/news/675493/

相关文章:

  • 萍乡网站制作公司末备案网站如何做cdn
  • 做透水砖的网站西充县企业网站建设
  • 29网站建设全部厦门建设网站建站
  • 列出网站开发建设的步骤高端品牌女装连衣裙
  • 长沙设计网站建设搜索引擎优化平台
  • 网站建设 可以吗打开浏览器的网站
  • 惠州定制网站制作推荐chinacd wordpress第三性
  • 网站建设从初级到精通网站开发成本预算价目表
  • 网站程序开发上海高端网站开发站霸网络
  • 企业网站对网络营销的意义环保材料 技术支持 东莞网站建设
  • 房地产网站建设价格买卖网站
  • 网站宣传方案开发专业网站
  • 电子商务+网站建设wordpress首页幻灯
  • 网站建设表格的属性学校网站建设命名
  • 清远网站建设自学网站开发要多久
  • 可信网站 quot 验证能防范哪些安全.教育类app开发价格表
  • 网站设计服务流程深圳网站设计公司费用大概多少
  • 邮件网站怎么做的本地计算机做网站服务器
  • 自己建的网站打不开html5 手机网站 模版
  • 网站建设跟网站结构如何提高网站排名的方法
  • 网站模板 缓存商标网上开店创业计划书
  • 沧州网站建设微艾薇怎样给企业做网站
  • 如何做淘宝客的网站个人网站设计与制作代码
  • 信用门户网站建设观摩惠州专业做网站
  • wordpress打开网站前广告佛山百度推广seo服务
  • 松北建设局网站vps 用ip可以访问网站么
  • 网站图片内容免费开源crm
  • wordpress调用分类栏目wordpress文章优化
  • 建站公司上海企业官网模板下载
  • 网站建设推广话术wordpress 不显示缩略图