使用 MVVMCross 和故事板开发 Xamarin.iOS 应用程序

Developing Xamarin.iOS application using MVVMCross and Storyboards

我正在尝试了解 Storyboards 在 iOS 开发中的工作原理以及 MVVMCross 如何融入其中。我认为最好的解决方案是构建一个 iOS 版本的 MVVMCRoss TipCalc 教程

我正在使用故事板,因为您无法在 Visual Studio 中编辑 XIB。我目前的想法是每个屏幕一个故事板。

我成功了,但感觉我是靠运气而不是判断力做到的。所以我想检查一下我的理解。

在TipCalc.UI.Touch我有

我已经添加了一个自定义的 Mvx View Container,如此 SO answer. 在该容器的 CreateViewOfType 方法中,我调用 Storyboard.InstantiateViewController 并将其转换为 IMvxTouchView。

controller怎么也是View?

我计划为每个故事板制作一个 "View"。

如果故事板中有多个视图,每个视图会有一个控制器吗?

当我在故事板设计器中为 "View" 调出属性 window 时,它在身份部分有一个名称和一个 class。 Class 属性的用途是什么? 这会创建代码隐藏文件吗?

我正在控制器的 ViewDidLoad 方法中创建 View-to-ViewModel 绑定

public override void ViewDidLoad()
{
    base.ViewDidLoad();
    this.CreateBinding(this.tipValueText).To<TipViewModel>(vm => vm.Tip).Apply();
    this.CreateBinding(this.subTotalTextBox).To<TipViewModel>(vm => vm.SubTotal).Apply();
    this.CreateBinding(this.generositySlider).To<TipViewModel>(vm => vm.Generosity).Apply();
}

这些绑定有效,但我只是想再次检查其他人是如何做到的。

iOSViewController其实就是一个MVVMCross应用中的View。您可以将视图控制器视为视图背后的代码(所以就像 Windows Phone/Windows 商店应用程序将有一个 XAML 和相关的 .cs 文件,或一个 Android 应用程序将有一个 axml 和一个 java 视图 class)

是的,当在单个故事板中使用多个视图时,每个视图实际上都是一个 viewcontroller(因为故事板中的屏幕就是这样)

class 属性 定义故事板中的布局使用哪个 viewcontroller class (因此使用 class 后面的代码,如果它不存在它将被创建)

我更喜欢单个故事板,因为我的大多数应用程序都没有太多屏幕,所以这些是我在现有故事板中创建视图时遵循的步骤

  1. 添加一个ViewController
  2. 在 Class 字段中输入视图名称(此名称对应于 ViewModel 名称,因此 HomeView 对应 HomeViewModel,等等)。一旦你点击回车,就应该创建 ViewController class。
  3. 键入与故事板 ID 相同的视图名称(这用于获取该视图)
  4. 添加控件并设置它们的名称。设置控件的名称将更新为 ViewController
  5. 创建的 .designer 文件
  6. 在 ViewController class 中创建 ViewDidLoad 覆盖并设置我的绑定

如果您为每个视图使用故事板,则创建具有正确名称(例如 HomeView)的故事板应该会为您创建 ViewController 和设计器文件,并为您提供包含该文件的故事板 viewcontroller 准备出发

编辑: 在你的绑定中,你可以使用一个 set.Apply();最后