走進 MvvmLight for Xamarin.Forms

1、Xamarin.Forms 不使用框架時的綁定框架

須要注意的是BindingContent,不是DataContentide

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="cal-namespace:XamarinDemo.ViewModels;assembly=XamarinDemo"
             x:Class="XamarinDemo.Views.MainView"
             BindingContent="{StaticResource MainViewModel}">
    <ContentPage.Resources>
        <ResourceDictionary>
            <local:MainViewModel x:Key="MainViewModel"/>
        </ResourceDictionary>
    </ContentPage.Resources>
 </ContentPage>

 2、Xamarin.Forms 使用MvvmLight時的綁定spa

首先加一個ViewModelLocatororm

public class ViewModelLocator
{
    static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        SimpleIoc.Default.Register<MainViewModel>();
    }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
            "CA1822:MarkMembersAsStatic",
            Justification = "This non-static member is needed for data binding purposes.")]
    public MainViewModel Main
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MainViewModel>();
        }
    }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
                "CA1822:MarkMembersAsStatic",
                Justification = "This non-static member is needed for data binding purposes.")]
    public static void Cleanup()
    {
        ServiceLocator.Current.GetInstance<LoginViewModel>().Cleanup();
    }
}

MainViewModelxml

public class MainViewModel : ViewModelBase
{
}

App.cs,默認的那幾個方法應該是沒用了blog

public class App : Application
{
    public App()
    {
        _locator = new ViewModelLocator();
        MainPage = GetMainPage();
    }

    private static ViewModelLocator _locator;
    public static ViewModelLocator Locator
    {
        get
        {
            return _locator ?? (_locator = new ViewModelLocator());
        }
    }

    public static Page GetMainPage()
    {
        return new MainView();
    }
}

MainView,這裏的BindingContext的Source 綁定的是App.cs 裏的ViewModelLocator屬性get

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:vm="clr-namespace:XamarinDemo;assembly=XamarinDemo"
             x:Class="XamarinDemo.Views.MainView"
             BindingContext="{Binding Main, Source={x:Static vm:App.Locator}}">
</ContentPage>

到了這裏,我也以爲MvvmLight仍是有好多要本身去實現的東西,因此打算放棄MvvmLight之旅了io

沒有Views和ViewModels 文件夾下名字相同的自動綁定,App裏要每一個頁面都寫一次,好煩的,否則就要本身封裝一個類form

恰巧看到園子裏的一個大神用的C.M寫的一個成品App,而WPF平臺我也用的C.M,因此打算迴歸C.M了,以前C.M剛突出的時候我記得支持的不全,如今貌似是全的了,因此仍是用熟悉的C.M吧class

相關文章
相關標籤/搜索