首页 > 解决方案 > 在 Xamarin 中的 UI 和代码模块之间传递值的最佳方式

问题描述

我正在为 Android 和 IOS 的 Xamarin 创建一个跨平台应用程序。该应用需要返回设备的位置(经度、纬度、地址的第一行)它还需要从 Mifare Ultralight Fobs 中读取特定数据。当出现“Admin Fob”时,应用程序将切换到写入模式,允许用户为其他用户编程 Fobs。我已经解决了基本问题,因为我可以获得地址详细信息并将数据读/写到 Fob。

随着 Xamarin 的不断发展,我想知道在 UI 和底层代码模块之间来回传递信息的最佳方法是什么。

似乎有 1) 使用静态变量 2) 依赖注入 3) 消息中心

我对 Xamarin 也很陌生。

标签: c#androidiosxamarin

解决方案


静态变量不是 UI 值的好选择,除非您知道自己在做什么。

最简单的方法就像@MindSwipe 所说的 MVVM 模式。创建一个简单的 ViewModel,将其设置为 BindingContext 并在 XAML 中使用 Binding。它与 WPF 基本相同,因此您可以使用许多适用于 Xamarin 的 WPF 指南。

这是一个简单的例子:

public class MyViewPage : ContentPage
{
  MyVieModel ViewModel = null;
  public MyViewPage(){
    this.BindingContext = ViewModel = new MyViewModel();
  }
}

视图模型:

public class MyViewModel : INotifyPropertyChanged
 {
   private int _Counter = 0;
   public int Counter
   {
     get { return _Counter; }
     set
     {
       _Counter = value;
       OnPropertyChanged(nameof(Counter));
     }
   }
 }

在 XAML 上只是简单的绑定:

<Label Text="{Binding Counter}" />

默认情况下,绑定与双向绑定一起使用,因此当您设置计数器时,UI 会立即更新。


推荐阅读