【问题标题】:Developing Xamarin.iOS application using MVVMCross and Storyboards使用 MVVMCross 和 Storyboards 开发 Xamarin.iOS 应用程序
【发布时间】:2015-01-05 08:24:19
【问题描述】:

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

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

我让它工作了,但感觉我这样做是靠运气而不是判断力。因此,我想检查一下我的理解。

在 TipCalc.UI.Touch 我有

  • TipViewController.cs
  • TipViewController.storyboard

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

控制器怎么也可以是视图?

我计划为每个故事板设置一个“视图”。

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

当我在情节提要设计器中打开“视图”的“属性”窗口时,它在“身份”部分中有一个名称和一个类。 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();
}

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

【问题讨论】:

    标签: xamarin.ios xamarin mvvmcross


    【解决方案1】:

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

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

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

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

    1. 添加视图控制器
    2. 在 Class 字段中输入视图名称(此名称将对应于 ViewModel 名称,因此 HomeView 对应于 HomeViewModel 等)。输入后,应立即创建 ViewController 类。
    3. 输入与 Storyboard Id 相同的视图名称(用于获取该视图)
    4. 添加控件并设置它们的名称。设置控件的名称将更新为 ViewController 创建的 .designer 文件
    5. 在 ViewController 类中创建 ViewDidLoad 覆盖并设置我的绑定

    如果您为每个视图使用故事板,则使用正确名称创建该故事板(例如 HomeView)应该会为您创建 ViewController 和设计器文件,并为您提供一个带有该视图控制器的故事板准备就绪

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

    【讨论】:

    • 感谢您花时间回答我漫无边际的问题 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2019-03-27
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多