使用MVVMCross和Storyboard开发Xamarin.iOS应用程序

时间:2015-01-05 08:24:19

标签: xamarin.ios xamarin mvvmcross

我试图了解故事板在iOS开发中的运作方式以及MVVMCross如何适应。我认为最好的解决方案是构建iOS版MVVMCRoss TipCalc教程

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

我有它的工作,但感觉就像我做的那样运气比判断更多。因此,我想检查一下我的理解。

在TipCalc.UI.Touch中我有

  • TipViewController.cs
  • TipViewController.storyboard

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

控制器如何成为View?

我打算每个故事板都有一个“视图”。

如果故事板中有多个视图,您是否每个视图都有一个控制器?

当我在故事板设计器中调出“视图”的“属性”窗口时,它在“标识”部分中有一个名称和一个类。 Class属性的目的是什么?是否会创建代码隐藏文件?

我在Controller的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();
}

这些绑定有效但我只是想检查其他人是否也这样做。

1 个答案:

答案 0 :(得分:1)

iOS ViewController实际上是MVVMCross应用程序中的View。您可以将视图控制器视为视图背后的代码(因此就像Windows Phone / Windows Store应用程序将具有XAML和相关的.cs文件,或者Android应用程序将具有axml和java视图类)< / p>

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

class属性定义了storyboard中布局使用的viewcontroller类(以便使用类后面的代码,如果它不存在则会创建)

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

  1. 添加ViewController
  2. 在“类”字段中键入视图名称(此名称对应于ViewModel名称,因此HomeView用于HomeViewModel等)。一旦按下Enter键,就应该创建ViewController类。
  3. 键入与Storyboard Id相同的视图名称(用于获取该视图)
  4. 添加控件并设置其名称。设置控件的名称将更新为ViewController
  5. 创建的.designer文件
  6. 在ViewController类中创建ViewDidLoad覆盖并设置我的绑定
  7. 如果您在每个视图中使用故事板,则使用正确的名称(例如HomeView)创建该故事板应该为您创建ViewController和设计器文件,并为您提供一个故事板,其中一个viewcontroller已准备就绪

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