【问题标题】:View models shared between WPF and Blazor in a .NET Standard project查看 .NET Standard 项目中 WPF 和 Blazor 之间共享的模型
【发布时间】:2021-04-20 13:14:50
【问题描述】:

是否可以在 .NET Standard 项目中保留视图模型?

我想为两种不同的应用程序提供一个通用视图模型:一种是用 WPF 编写的,另一种是用 Blazor 编写的。 当我想在一个单独的线程中调用我的 ICommand 的事件 CanExecuteChanged?.Invoke(this, EventArgs.Empty); 并得到一个错误时,问题出现了:“System.InvalidOperationException:调用线程无法访问此对象,因为不同的线程拥有它。”。我在 .NET Standard 中看不到 Dispatcher 支持,也看不到它的任何替代方案。这样的视图模型能否在不同平台(例如 Windows、Mac 和 Linux)之间共享?

【问题讨论】:

    标签: c# wpf mvvm blazor .net-standard


    【解决方案1】:

    好主意。假设 SPA,我尝试实现它的方式是注册一个具有依赖注入的类,该类将代表 ICommand。 示例代码来自一个类,该类从我在网络上找到的一个小建议发展为很多功能。

    我刚刚剪掉了几段代码,如果您想尝试这种方式并且需要更多信息,请告诉我,我会给出完整的代码答案。

    然后按钮上的@onclick 方法可以调用在注入的类中引发事件的方法。 订阅类可以在同一个组件或其他任何地方。

    此外,如果您的 WPF 不是开发人员展示他们对 WPF 的理解程度的其中之一,那么您应该能够编写一个脚本来实现这种转换的自动化。

    在旁注中,我肯定看到 Blazor Serverside 与 WPF 的相似之处。对我来说,就好像 WPF 得到了长期的更新,并且几乎在每个领域都得到了改进。我也把它当作 WPF 来处理,但我不尝试直接转换,因为它已经改进了。

     public void ShowNotification(NotificationMessage notificationMessage)
        {
            Message = notificationMessage;
            NotifyMessageArrived();
        }
    
         
        private void NotifyMessageArrived()
        {
            OnRaiseMessageArrivedNotification?.Invoke();
        }
     public event Action OnRaiseMessageArrivedNotification;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2020-11-22
      相关资源
      最近更新 更多