2015-10-20 94 views
3

我开始一个新的项目,和id喜欢使用MVVM - 我真的很喜欢这种模式,我一直在我所有的Windows Phone 8.1应用程序中使用它。但转移到xamarin是一个丛林!我通常使用mvvm light,并且每次创建一个新项目时都会使用一个很好的基本实现 - 但我无法找到一个非常好的示例,显示我需要的内容。 我想要做的是制作一个Xamarin共享(或便携)项目,它跨所有平台共享视图。我想编写使用代码隐藏创建视图 - 所以没有XAML。 有没有人有这方面的经验,并可以指向我一个很好的示例? 我也想知道是否需要使用第三方框架,因为导航似乎很容易。视觉工作室xamarin形式mvvm

+0

你为什么要这么做? XAML的主要优点是快速简单的UI设计和简单的绑定 – Tseng

+0

我不喜欢XAML。我更喜欢尽可能使用一种语言。恕我直言,长期维护更容易。 – Wosi

回答

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. 比方说,比如你想的signoutButton向视图模型的属性SignOutButtonTextSignoutCommandTextCommand属性绑定。你会改变这个创建按钮:

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

感谢您的回答。我并没有意识到愤怒中的形式:)一直在研究它,并尝试一些东西 - 这非常好。我的问题是没有制作一个简单的MVVM应用程序,但是当涉及浏览 - 并在视图模型之间传递参数时 - 它变得复杂。我现在的解决方案是将参数传递给视图,然后在viewmodel上执行我需要的操作,添加数据等等,但是我有点感觉我打破了这里的模式 - 因为存在更高的耦合度。通常我会让视图实现viewmodels构造函数的导航接口。 – OneBigQuestion