MvvmLight for Xamarin.Forms

一、Xamarin.Forms 不使用框架时的绑定

需要注意的是BindingContent,不是DataContent

<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>

 二、Xamarin.Forms 使用MvvmLight时的绑定

首先加一个ViewModelLocator

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();
    }
}

MainViewModel

public class MainViewModel : ViewModelBase
{
}

App.cs,默认的那几个方法应该是没用了

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属性

<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之旅了

没有Views和ViewModels 文件夹下名字相同的自动绑定,App里要每个页面都写一次,好烦的,不然就要自己封装一个类

恰巧看到园子里的一个大神用的C.M写的一个成品App,而WPF平台我也用的C.M,所以打算回归C.M了,之前C.M刚突出的时候我记得支持的不全,现在貌似是全的了,所以还是用熟悉的C.M吧

 

你可能感兴趣的:(MvvmLight for Xamarin.Forms)