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

wpf stylet框架 关于View与viewmodel自动关联绑定的问题

1.1 命名规则   Aview 对应  AVIewModel,       文件夹  views  和    viewmodels

1.2 需要注册服务

//RootViewModel是主窗口

public class Bootstrapper : Bootstrapper<RootViewModel>{/// <summary>///     配置IoC容器。为数据共享创建服务/// </summary>/// <param name="builder"></param>protected override void ConfigureIoC(IStyletIoCBuilder builder){builder.Bind<SharedDataService>().ToSelf().InSingletonScope();builder.Bind<AddCategoryViewModel>().ToSelf();}

 2 主窗口打开子窗口  如:RootViewModel==>AddCategoryViewModel   

命令绑定方式:   Command="{s:Action OpenWindowAction}"

public RootViewModel _rootViewModel ;
private IWindowManager _windowManager;public RootViewModel(IWindowManager windowManager,SharedDataService sharedService)
{_windowManager = windowManager;EditContent =  new();_rootViewModel = this;_sharedService = sharedService;_sharedService.CategoryNameChanged += OnCategoryAdded;}  public void OpenWindowAction(object commandParameter){_windowManager.ShowWindow(new AddCategoryViewModel(_sharedService));  //打开子窗口}//xaml :
<Button Content="&#xe650;"Command="{s:Action OpenWindowAction}"FontFamily="{StaticResource IconFont}"FontSize="20"Foreground="{DynamicResource TextIconBrush}"Style="{StaticResource ButtonCustom}" />

3 窗口通信 , 注册服务 如上1.2:   

 private readonly SharedDataService _sharedService= new(); public NoteContentModel _noteContentModel = new();public RootViewModel(IWindowManager windowManager,SharedDataService sharedService)
{_windowManager = windowManager;EditContent =  new();_rootViewModel = this;_sharedService = sharedService;_sharedService.CategoryNameChanged += OnCategoryAdded;//监听共享数据服务事件}  /// <summary>///  共享数据服务.///  <para>如果跨线程修改数据(异步,多线程),需通过 ///  Execute.OnUIThread(() => SharedValue = "新值");</para>///  /// </summary>
public  class SharedDataService: PropertyChangedBase
{private string _CategoryName;public string CategoryName{get { return _CategoryName; }set { SetAndNotify(ref _CategoryName, value);CategoryNameChanged?.Invoke(value); // 触发事件 }}/// <summary>///  分类名称发生变化事件./// </summary>public event Action<string> CategoryNameChanged;

子窗口代码

 public partial class AddCategoryViewModel : Screen{private readonly SharedDataService _sharedService;public AddCategoryViewModel() { }// 通过构造函数注入 public AddCategoryViewModel(SharedDataService sharedService){_sharedService = sharedService;}private string _categoryName;public string CategoryName{get => _categoryName;set => SetAndNotify(ref _categoryName, value);}// 使用 Stylet 的 RelayCommand 替代 System.Windows.Input public RelayCommand WinClosedCommand => new RelayCommand((o) =>{// 更新共享数据 _sharedService.CategoryName = CategoryName;((HC.PopupWindow)o).Close();关闭窗口(Stylet 标准方式)//this.RequestClose(true);});}

<hc:Window x:Class="ProgramNotes.Views.AddCategoryView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:hc="https://handyorg.github.io/handycontrol"xmlns:local="clr-namespace:ProgramNotes.Views"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:vm="clr-namespace:ProgramNotes.ViewModels"xmlns:i="http://schemas.microsoft.com/xaml/behaviors"xmlns:s="https://github.com/canton7/Stylet"Width="300"Height="50"d:DataContext="{d:DesignInstance Type=vm:AddCategoryViewModel}"AllowsTransparency="True"ShowInTaskbar="False"ShowTitle="False"BorderThickness="1"Background="{StaticResource WindowBrush}" WindowStartupLocation="CenterScreen"WindowStyle=" None"mc:Ignorable="d"><Grid Margin="8"><hc:SimplePanel ><TextBlock Margin="0"HorizontalAlignment="Left"VerticalAlignment="Center"Text="新的类别名称 " /><TextBox HorizontalAlignment="Stretch"Height="28"Text="{Binding CategoryName, Mode=TwoWay}"Margin="75,0 50 0"/></hc:SimplePanel><Button Grid.Row="0"Grid.Column="1"Margin="0"Style="{StaticResource ButtonPrimary}"Command="{Binding WinClosedCommand }"CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type hc:Window}}}"HorizontalAlignment="Right"VerticalAlignment="Center"Height="26"Content="确定" ></Button></Grid>
</hc:Window>

http://www.xdnf.cn/news/663.html

相关文章:

  • 每日面试实录·携程·社招·JAVA
  • VLC搭建本机的rtsp直播推流和拉流
  • STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)
  • C语言KMP算法实现
  • max31865典型电路
  • OpenCV 在二值图像中查找轮廓 cv2.findContours
  • Linux 常用命令 -pkill【通过进程名或其他属性来发送信号给一个或多个进程】
  • Transfomer的本质
  • Go语言--语法基础4--基本数据类型--浮点数类型
  • AWS EC2完全指南:如何快速搭建高性能云服务器?
  • A2A协议详解:打造统一的AI代理通信标准,实现多Agent系统协同
  • TDengine 性能监控与调优实战指南(一)
  • SQL注入 02
  • 【Part 2安卓原生360°VR播放器开发实战】第一节|通过传感器实现VR的3DOF效果
  • SpringBoot编写单元测试
  • libdxfrw库使用总结
  • 开源的 PDF 文件翻译软件
  • 借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
  • 【源码+文档+调试讲解】扶贫助农系统
  • VSCode PIO使用Jlink SWD烧录Stm32
  • 【C++】初始化列表
  • 信息系统项目管理工程师备考计算类真题讲解五
  • Redis ④-通用命令
  • 解决Docker 配置 daemon.json文件后无法生效
  • 【数据可视化-19】智能手机用户行为可视化分析
  • Windows 环境下安装 MariaDB 及 HeidiSQL 使用教程
  • 玩机搞机基本常识-------小米OLED屏幕机型怎么设置为永不休眠_手机不息屏_保持亮屏功能 拒绝“烧屏” ?
  • 【Vim】vim的简单使用
  • 小迪第10天http/s数据包
  • JavaScript 一维数组转二维数组