.Net Maui:如何从任何内容页面(MVVM)读取/写入(获取/设置)全局对象

2023-12-13

我确信我在这里遗漏了一些深刻或明显的概念:)

现在我有了一个页面,可以设置各种蓝牙传感器并从心率监视器、速度计和踏频传感器获取数据。 (使用插件.BLE)

因此,我在 ViewModel 中为名为“BluetoothPage”的 ContentPage 执行所有这些操作。

我想在名为 DisplayPage 的不同 ContentPage 中显示我获得的数据。

我创建了一个简单的类(模型),可以保存我想要的数据:

namespace TSDZ2Monitor.Models;

public partial class BluetoothData : ObservableObject
{
  //Heart rate raw data
  public int HRM { get; set; }
  public double HRR { get; set; }

  //SPD raw data
  public int SPDWheelRevolutions { get; set; }
  public double SPDWheelEventTime { get; set; }

  //CAD raw data
  public int CADCrankRevolutions { get; set; }
  public double CADCrankEventTime { get; set; }

}

那么,如何将数据从蓝牙页面获取到显示页面呢?

我怀疑我需要使用基于我的模型的对象,并用我的蓝牙视图模型中的数据填充它(简单......)?

但是我的显示页面如何才能看到这些数据呢?

当我尝试使用 React Native 时,这种事情简直就是一场噩梦(状态!)

还是我脑子有点简单:lol

解决方法:我可以将数据保存到本地存储或 sqlitehttps://learn.microsoft.com/en-us/learn/dotnet-maui/store-local-data/2-compare-storage-options- 这是这样做的方法,还是可以用对象来完成?

G.

编辑:我想我也可以使用 MessagingServicehttps://learn.microsoft.com/en-us/dotnet/maui/fundamentals/messagingcenter and https://codemilltech.com/messing-with-xamarin-forms-messaging-center/如果我能弄清楚如何在 MVVM 上下文中使用它们。

Also 使用 MessagingCenter 和标准 .NET 事件处理程序向感兴趣的各方通知更改有什么区别?


因此,使用 MessagingCenter 似乎是一种可行的方法。

遵循中的指导https://codemilltech.com/messing-with-xamarin-forms-messaging-center/

我创建了一个 MessagingMarker 类:

namespace TSDZ2Monitor.Classes;

public class MessagingMarker
{
}

就这样。

在我想从中发送对象的 ViewModel 中,我做了

MessagingCenter.Send(new MessagingMarker(), "BTDataUpdate", btd);

其中 btd 是我创建的用于保存数据的类的实例:这是一个简化的模型:

namespace TSDZ2Monitor.Models;

public partial class BluetoothData : ObservableObject
{
  //Heart rate raw data
  private int hRM;
  public int HRM  //heart rate
  {
    get => hRM;
    set => SetProperty(ref hRM, value);
  }
  private double hRR; //heartrate R-R value
  public double HRR
  {
    get => hRR;
    set => SetProperty(ref hRR, value);
  }

  private double wheelRPM;
  public double WheelRPM
  {
    get => wheelRPM;
    set => SetProperty(ref wheelRPM, value);
  }

  private double cadence;
  public double Cadence
  {
    get => cadence;
    set => SetProperty(ref cadence, value);
  }

}

在发送页面的 ViewModel 的构造函数中(可能最好在其他地方?)

 public BluetoothData btd = new();

此 ViewModel 的 XAML 中未使用此值

在我接收的 ViewModel 中

我还创建了 BluetoothData 类的实例,但这在 XAML 绑定中使用

  [ObservableProperty]
  private BluetoothData bTData;

在 ViewModel 的构造函数中我有

    BTData = new BluetoothData();

    MessagingCenter.Subscribe<MessagingMarker, BluetoothData>(this, "BTDataUpdate", (sender, arg) =>
    {
      //Debug.WriteLine($"Message received {arg}");
      BTData.HRM                   = arg.HRM;
      BTData.HRR                   = arg.HRR;
      BTData.WheelRPM              = arg.WheelRPM;
      BTData.Cadence               = arg.Cadence;
    });

好吧,它有效,不知道对性能的影响可能是什么,但它看起来反应相当灵敏。

按照我的想法,更理想的解决方案是创建任何 ViewModel 都可以访问的任何类的全局实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net Maui:如何从任何内容页面(MVVM)读取/写入(获取/设置)全局对象 的相关文章

  • MVVM 的 ReSharper 警告

    当我使用 WPF 实现 MVVM 模式时 我发现 ReSharper 经常警告我某些属性从未在我的 ViewModel 中使用 问题是它们正在被使用 但仅由数据绑定系统使用 有其他人遇到过这种烦恼吗 有没有办法帮助 ReSharper 意识
  • 将多选列表框中的 SelectedItems 与 ViewModel 中的集合同步

    我在使用 prism 的 SL3 应用程序中有一个多选列表框 并且我的视图模型中需要一个集合 其中包含列表框中当前选定的项目 视图模型对视图一无所知 因此它无法访问列表框控件 另外 我需要能够从视图模型中清除列表框中的选定项目 不知道如何解
  • 如何将 ICommand 添加到 FrameworkElement 中的事件?

    我怎样才能添加一个ICommand到一个事件从FrameworkElement 具体来说我想做以下事情
  • 从 IValueConverter 获取对 ViewModel 的引用

    是否有一种干净的和 或可接受的标准方式从 IValueConverter 引用 ViewModel 或者这是否打破了 MVVM 模式 基本上 我想根据 ViewModel 的其他属性转换 UI 中的绑定数据 我想这与如何从 IValueCo
  • 定制 NET MAUI 启动画面

    我正在尝试制作闪屏 Net毛伊岛包含渐变背景和动画徽标 我看过有关如何制作简单的飞溅的教程
  • 使用 MVVM 为 WPF 搭建脚手架?

    谁能告诉我是否可以 如果存在某些实用程序 创建考虑到 MVVM 和 WPF 的脚手架 我的想法是我似乎有很多数据访问表单 当然我想自定义它们 但最初我想要一种快速提供表单的方法 即放置在它们上面并绑定到 mvvm 的所有控件 也许我问得很多
  • 将 ASP.NET Core 6 应用程序部署到现有的 Azure 应用服务?

    根据今天的公告ASP NET 核心 6 https devblogs microsoft com dotnet announcing asp net core in net 6 释放 据我了解 NET 6 将立即可用 https azure
  • 具有可绑定属性的自定义视图未在 Xamarin.Forms SAP 上正确绑定

    我有一个复选框 应该触发按钮的 IsEnabled 事件 但不知何故 应该执行的命令永远不会正确绑定并因此执行 这是 CheckBox xaml cs 控件 中的可绑定属性 public static readonly BindablePr
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 如何从 silverlight 中的视图模型从一个视图导航到另一个视图?

    我有一个 ViewModel 和两个 View 如何从 ViewModel 导航到 View2 我在某处读到我们需要使用 PRISM 在 Silverlight 中从 ViewModel 打开多个视图 PRISM 有什么替代方案吗 理想情况
  • 我对 MVVM 模式有一些疑问

    我叫 Jes s 来自西班牙 是一名 NET 开发人员 几天前我刚刚发现了这个伟大的网络 我有一些关于 MVVM 模式的问题 如果您能回答我 我将很高兴 我三个月前开始使用 WPF 并且学习了 MVP 模式 MVP 非常好 因为您可以很好地
  • 如何在 MVVM 中使用应用程序命令

    我想使用 ApplicationCommands Cut 复制 粘贴 保存 它们看起来很有趣 因为命令路由 键绑定以及某些控件使用它们的事实 我了解如何绑定到虚拟机上的中继 委托命令 但我似乎无法理解应用程序命令 我找到了一些旧的答案 但没
  • 如何为多个 BO 属性定义 IDataErrorInfo 错误属性

    我开始通过 IDataErrorInfo 接口在我的 WPF 项目中实现验证 我的业务对象包含多个带有验证信息的属性 如何获取与该对象关联的所有错误消息的列表 我的想法是 这就是 Error 属性的用途 但我无法追踪任何使用它来报告多个属性
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • 如何创建自动滚动文本框

    我有一个 WPF 应用程序 其中包含一个多行文本框 用于显示调试文本输出 如何设置文本框 以便将文本附加到框中时 它会自动滚动到文本框的底部 我正在使用 MVVM 模式 理想情况下 纯 XAML 方法会很好 TextBox 本身不一定是焦点
  • 如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?

    我对 Android 架构组件的使用非常陌生 因此我决定使用 GithubBrowserSample 来构建我的应用程序来实现我的许多用例 但我有一个问题 我不知道使用这种方法在片段之间共享视图模型的正确方法是什么 我想共享视图模型 因为我
  • 在 AngularJS 中设置应用程序范围的 HTTP 标头

    有没有办法设置 httpProvider标题之外angular module myApp config 登录用户后 我从服务器获取身份验证令牌 我需要将其作为 HTTP 标头添加到所有后续请求中 您可以使用角度的默认标题1 0 x http
  • 如何更改 TextBox.Text 而不丢失 WPF 中的绑定?

    在 WPF 应用程序中 我正在创建一个设置窗口来自定义键盘快捷键 在文本框中 我处理 KeyDown 事件并将 Key 事件转换为人类可读的形式 以及我想要获取数据的形式 文本框声明如下
  • ViewModel 中的 TextBox CaretIndex 属性

    是否可以通过视图中定义的 Binding 获取 设置 wpf 视图模型中 TextBox 控件的 CaretIndex 属性的值 Thanks 这里的问题是如何获得CaretIndex of the TextBox通过视图模型进行控制 如果

随机推荐