【问题标题】:visual studio xamarin forms mvvm视觉工作室 xamarin 形成 mvvm
【发布时间】:2016-01-19 13:45:28
【问题描述】:

我正在开始一个新项目,我喜欢使用 MVVM - 我真的很喜欢这种模式,并且我一直在我的所有 windows phone 8.1 应用程序中使用它。但搬到 xamarin 是一片丛林!我通常使用 mvvm light,并且我有一个很好的基本实现,我每次创建一个新项目时都会使用 - 但我找不到一个非常好的示例来准确显示我需要什么。 我想做的是制作一个 xamarin 共享(或可移植)项目,该项目在所有平台上共享视图。我想使用代码隐藏编写创建视图 - 所以没有 xaml。 有没有人有这方面的经验,可以指点我一个好的样本? 我还想知道我是否需要使用 30 方框架,因为导航似乎很容易。

【问题讨论】:

  • 您为什么要这样做? XAML 的主要优点是快速轻松地设计 UI 和轻松绑定
  • 我不喜欢 XAML。我更喜欢尽可能多地使用一种语言。恕我直言,从长远来看,它更容易维护。

标签: c# xamarin mvvm xamarin.forms


【解决方案1】:

有很多样本可供查找。我最喜欢的 Xamarin.Forms 示例站点是 Xamarin Forms in Anger

我们来看看Jobbberr sample

using System;
using Xamarin.Forms;

namespace InAnger.Jobbberr
{
    public class SettingsPage : ContentPage
    {
        public SettingsPage ()
        {
            Style = AppStyle.SettingsPageStyle;

            var pageTitle = new Frame () {
                Style = AppStyle.PageTitleLabelFrameStyle,
                Padding = new Thickness(0,Device.OnPlatform(15,0,0),0,10),
                Content = new Label { 
                    Style = AppStyle.PageTitleLabelStyle,
                    Text = "Settings",
                }
            };

            var signoutButton = new Button () {
                VerticalOptions = LayoutOptions.EndAndExpand,
                HorizontalOptions = LayoutOptions.Center,
                Text = "Sign Out",
                TextColor = AppStyle.DarkLabelColor,
            };

            Content = new StackLayout {
                VerticalOptions = LayoutOptions.FillAndExpand,
                Padding = new Thickness (20),
                Children = {
                    pageTitle,
                    new BoxView() {
                        HeightRequest = 1,
                        BackgroundColor = AppStyle.DarkLabelColor,
                    },
                    new SettingsUserView(),
                    new SyncView (),
                    new SettingsSwitchView ("GPS"),
                    new SettingsSwitchView ("Jobs Alert"),
                    signoutButton,
                    new StatusBarView()
                }
            };
        }
    }
}

你在这里看到了什么?

新类SettingsPage 派生自ContentPage。控件pageTitlesignoutButton 在其构造函数中创建。最后,您会看到StackLayout 是如何被创建、填充控件并设置为页面内容的。这就是如何在代码中创建Page

如何应用MVVM?

  1. 在构造函数的第一行设置BindingContext = ViewModel(创建一个新的视图模型或通过ViewModelLocator或其他方式定位它)。

  2. 假设您想将signoutButtonTextCommand 属性绑定到视图模型的属性SignOutButtonTextSignoutCommand。您可以将按钮的创建更改为:

    var signoutButton = new Button () {
        VerticalOptions = LayoutOptions.EndAndExpand,
        HorizontalOptions = LayoutOptions.Center,
        TextColor = AppStyle.DarkLabelColor,
    };
    
    signoutButton.SetBinding(Button.TextProperty, "SignOutButtonText");
    signoutButton.SetBinding(Button.CommandProperty, "SignoutCommand");
    

【讨论】:

  • 感谢您的回答。我不知道愤怒中的表格 :) 一直在研究它,并尝试了一些东西 - 这非常好。我的问题不是制作一个简单的 MVVM 应用程序,而是在导航和在视图模型之间传递参数时,它变得很复杂。我现在的解决方案是将参数传递给视图,然后在视图模型上执行我需要的操作、添加数据等,但我觉得我在这里打破了模式——因为耦合度更高。通常我会让视图实现到 viewmodels 构造函数的导航接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多