一、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吧