使用 MVVMCross 和故事板开发 Xamarin.iOS 应用程序
Developing Xamarin.iOS application using MVVMCross and Storyboards
我正在尝试了解 Storyboards 在 iOS 开发中的工作原理以及 MVVMCross 如何融入其中。我认为最好的解决方案是构建一个 iOS 版本的 MVVMCRoss TipCalc 教程
我正在使用故事板,因为您无法在 Visual Studio 中编辑 XIB。我目前的想法是每个屏幕一个故事板。
我成功了,但感觉我是靠运气而不是判断力做到的。所以我想检查一下我的理解。
在TipCalc.UI.Touch我有
- TipViewController.cs
- TipViewController.storyboard
我已经添加了一个自定义的 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 后面的代码,如果它不存在它将被创建)
我更喜欢单个故事板,因为我的大多数应用程序都没有太多屏幕,所以这些是我在现有故事板中创建视图时遵循的步骤
- 添加一个ViewController
- 在 Class 字段中输入视图名称(此名称对应于 ViewModel 名称,因此 HomeView 对应 HomeViewModel,等等)。一旦你点击回车,就应该创建 ViewController class。
- 键入与故事板 ID 相同的视图名称(这用于获取该视图)
- 添加控件并设置它们的名称。设置控件的名称将更新为 ViewController
创建的 .designer 文件
- 在 ViewController class 中创建 ViewDidLoad 覆盖并设置我的绑定
如果您为每个视图使用故事板,则创建具有正确名称(例如 HomeView)的故事板应该会为您创建 ViewController 和设计器文件,并为您提供包含该文件的故事板 viewcontroller 准备出发
编辑:
在你的绑定中,你可以使用一个 set.Apply();最后
我正在尝试了解 Storyboards 在 iOS 开发中的工作原理以及 MVVMCross 如何融入其中。我认为最好的解决方案是构建一个 iOS 版本的 MVVMCRoss TipCalc 教程
我正在使用故事板,因为您无法在 Visual Studio 中编辑 XIB。我目前的想法是每个屏幕一个故事板。
我成功了,但感觉我是靠运气而不是判断力做到的。所以我想检查一下我的理解。
在TipCalc.UI.Touch我有
- TipViewController.cs
- TipViewController.storyboard
我已经添加了一个自定义的 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 后面的代码,如果它不存在它将被创建)
我更喜欢单个故事板,因为我的大多数应用程序都没有太多屏幕,所以这些是我在现有故事板中创建视图时遵循的步骤
- 添加一个ViewController
- 在 Class 字段中输入视图名称(此名称对应于 ViewModel 名称,因此 HomeView 对应 HomeViewModel,等等)。一旦你点击回车,就应该创建 ViewController class。
- 键入与故事板 ID 相同的视图名称(这用于获取该视图)
- 添加控件并设置它们的名称。设置控件的名称将更新为 ViewController 创建的 .designer 文件
- 在 ViewController class 中创建 ViewDidLoad 覆盖并设置我的绑定
如果您为每个视图使用故事板,则创建具有正确名称(例如 HomeView)的故事板应该会为您创建 ViewController 和设计器文件,并为您提供包含该文件的故事板 viewcontroller 准备出发
编辑: 在你的绑定中,你可以使用一个 set.Apply();最后