WinForm使用Prism和DryIoc实现跨窗体数据绑定

这篇具有很好参考价值的文章主要介绍了WinForm使用Prism和DryIoc实现跨窗体数据绑定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WinForm数据绑定

使用Prism和DryIoc实现跨窗体数据绑定
开发环境: VS2022 .Net 6.0 WinForm界面程序
要求:

  1. DryIoc容器注册为单例(Singleton)=>DryIoc
  2. VM需要实现数据更改通知=>Prism
  3. 控件数据限幅要一样=>NumericUpDown

🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️
效果:

  1. Form2修改Score时Form1立即同步更新
  2. Form1修改Score时Form1立即同步更新
  3. 绑定是双向的,增加绑定后VM数据与界面数据自动同步
    prism winform版本,WinForm,c#,.net,microsoft,windows

🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️🍇️文章来源地址https://www.toymoban.com/news/detail-687367.html

internal static class Program
{
    [NotNull]
    internal static DryIoc.Container?  Ioc { get; set; }
    [STAThread]
    static void Main()
    {
        ApplicationConfiguration.Initialize();
        Ioc = new DryIoc.Container();   
        Application.Run(new Form1());
        Ioc.Dispose();
    }
}
// Form1
public partial class Form1 : Form
{
    public Form1VM VM { get; set; }
    public Form1()
    {
        Program.Ioc.RegisterMany<Form1VM>(Reuse.Singleton);
        VM = Program.Ioc.Resolve<Form1VM>();
        VM.ScoreMin = 0.5M;

        num1.DataBindings.Add(new Binding("Value", VM, "ScoreMin", false, DataSourceUpdateMode.OnPropertyChanged));
    }
    private void btn_f2_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.Show();
        // f2.Dispose();  // ShowDialog时使用
    }
}

// Form2
public partial class Form2 : Form
{
    public Form1VM VM { get; set; }
    public Form2()
    {
        InitializeComponent();
        VM = Program.Ioc.Resolve<Form1VM>();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        num1.DataBindings.Add(new Binding("Value", VM, "ScoreMin", false, DataSourceUpdateMode.OnPropertyChanged));
        this.TopMost = true;
    }
}


public class Form1VM : BindableBase, IVM
{
    private decimal _ScoreMin;
    public decimal ScoreMin
    {
        get
        {
            return _ScoreMin;
        }
        set
        {
            //var tmp = Math.Clamp(value, 0.3M, 1M);
            SetProperty(ref _ScoreMin, value); // Form2超限会引发异常
        }
    }
}

到了这里,关于WinForm使用Prism和DryIoc实现跨窗体数据绑定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF Prism的简单使用

    新建 WPF 项目,我是基于 .net 5.0-windows 创建的。 引入 Prism.DryIoc(8.1.97) 的 Nuget 包。 App.xaml 中引入命名空间。 将 App.xaml 中 Application 标签更改成 prism:PrismApplication 并去除 StartUri 属性,将 App.xaml.cs 中 Application 更改成 PrismApplication 。 实现 PrismApplication (实际上是 PrismApplicationBas

    2023年04月14日
    浏览(76)
  • WPF框架Prism的使用 二

    这是第二篇关于Prism-WPF的介绍,第一篇中我们简单介绍了Prism,然后讲述了如何搭建一个MVVM的简单页面程序。其实我写的文章就是把github上面的官方例子摘出来自己跑了一遍,然后加上了一些自己的理解,简单给大家分享一下。 下面放上传送门: 第一篇的链接 官方提供的示

    2024年04月10日
    浏览(46)
  • wpf 项目中使用 Prism + MaterialDesign

      1.通过nuget安装MaterialDesign  2.通过nuget安装Prism 3.修改App.xmal  红色矩形框是需要更改的地方  3.修改app.xmal.cs文件 修改红色矩形框中的内容   至此,编译不出错,就算是好了 这时会出现两个窗体 记得删除  StartupUri=\\\"MainWindow.xaml\\\"即可

    2024年02月14日
    浏览(34)
  • Wpf 使用 Prism 实战开发Day10

    1-9章节已经把基本功能都做好了,但页面的数据是后台模拟生成的静态数据。接下来所有章节就是实现,页面的所有数据都是从数据库中获取,并且实现页面数据的持久化以及增删改查。 使用Sqlite 做为数据库  1.打开 MyToDo.Api项目,右键=》选择 管理NuGet 程序包 ,进行下载安

    2024年01月25日
    浏览(45)
  • Wpf 使用 Prism 实战开发Day12

    控制器类需要继承  ControllerBase 基类 需要添加 [ ApiController]  特性以及 [ Route]  特性 Route (路由) 特性参数规则,一般写法是  [Route(\\\"api/[controller]/[action]\\\")] 。也就是路由访问路径:前缀api/当前控制器/具体的方法 为了业务处理逻辑和控制器之间实现解耦。可以通过设计:

    2024年01月16日
    浏览(48)
  • Wpf 使用 Prism 实战开发Day01

    1.  VisualStudio 2022 2.  . NET SDK 7.0 3.  Prism 版本 8.1.97 以上环境,如有新的版本,可自行选择安装新的版本为主 项目名称:这里只是记录学习,所以随便命名都无所谓,只要觉得合理就行 注意: 下载的包名是 Prism.DryIoc 。为什么不是Prism.xxx其他包,而是 Prism.DryIoc ,别问我,我也不

    2024年02月08日
    浏览(43)
  • Wpf 使用 Prism 实战开发Day02

    导航条的样式,主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库,就看自己需要什么,就去拷过来使用,界面布局或其他组件使用,不做介绍。 直接下载源码,编译运行就可以看到Demo 了 反正我下载完且编译后是能正常跑起来,没有办法跑起来的,找找自

    2024年02月06日
    浏览(43)
  • Wpf 使用 Prism 实战开发Day14

    备忘录控制器(MemoController)和待办事项控制器 (ToDoController)功能实现差不多一样。基本套路就是: 定义控制器(Controller) 定义数据传输层(Dto) 配置实体类(Entity)和数据传输类(Dto) 关系映射(Auto Mapper) 定义服务接口(IService) 实现服务接口 (Service) 把服务注入控

    2024年01月22日
    浏览(46)
  • Wpf 使用 Prism 实战开发Day03

    效果图:   创建 Models ,放置实体类。 实体类需要继承自 Prism 框架的  BindableBase ,目的是让实体类支持数据的动态变更!  例如: 系统导航菜单实体类 创建View文件夹  放置前端显示页面 。例如:创建首页: MainView.xaml 创建ViewModel 文件夹,放置前端逻辑处理类。意思是:有前端

    2024年02月08日
    浏览(43)
  • Wpf 使用 Prism 实战开发Day11

     仓储(rep):仓储接口定义了对实体类访问数据库及操作的方法。它统一管理数据访问的逻辑,并与业务逻辑层进行解耦。 简单的理解就是对访问数据库的一层接口封装。 工作单元(uow):用来保证我们处理业务逻辑的,稳定性,完整性。防止在业务操作过程中,涉及对数据

    2024年02月02日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包