zoukankan      html  css  js  c++  java
  • 走进 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吧

  • 相关阅读:
    [No0000139]轻量级文本编辑器,Notepad最佳替代品:Notepad++
    [No0000138]软件开发基础知识
    [No0000137]字符编码详解
    [No0000144]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈1/4
    [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
    [No0000135]程序员修炼之道 Tips
    phpstorm 调试时浏览器显示The requested resource / was not found on this server
    php注解
    phpStorm 配置PHP_CodeSniffer自动检查代码
    php
  • 原文地址:https://www.cnblogs.com/heyixiaoran/p/4859911.html
Copyright © 2011-2022 走看看