MvvmCross Android:链接杀死SwitchCompat.Checked的正确性

时间:2018-10-16 09:23:45

标签: mvvmcross

我有将SwitchCompat绑定到ViewModel的布局

<android.support.v7.widget.SwitchCompat 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:MvxBind="Checked FlashlightEnabled;
                         Click FlashlightCheckedCommand"/>

我还在LinkerPleaseInclude.cs文件中添加了一些Include方法

public void Include(Switch s)
        {
            s.CheckedChange += (sender, args)
                => s.Checked = !s.Checked;
            s.Checked = true;
        }

        public void Include(SwitchCompat sc)
        {
            sc.CheckedChange += (sender, args)
                => sc.Checked = !sc.Checked;
            sc.Checked = true;
        }

但是当我设置 SDK和用户程序集链接时,我的Checked绑定将被删除。

输出消息:

2018-10-16 12:31:17 [WARN](MvxBind)无法创建用于绑定的目标绑定已检查FlashlightEnabled10-16 12:31:17.143 I / mono-stdout(5716):位于System.Activator。 CreateInstance(System.Type类型,System.Reflection.BindingFlags bindingAttr,System.Reflection.Binder活页夹,System.Object []

enter image description here

1 个答案:

答案 0 :(得分:0)

确保已将[Android.Runtime.Preserve(AllMembers = true)]添加到您的LinkerPleaseInclude类中。如果不是这样,该类将被忽略。

Here您拥有最新的LinkerPleaseInclude,请确保您拥有相同的名字:

using Android.App;
using Android.Views;
using Android.Widget;
using MvvmCross.Binding.BindingContext;
using MvvmCross.Navigation;
using MvvmCross.ViewModels;
using System;
using System.Collections.Specialized;
using System.Windows.Input;

namespace $YourNameSpace$
{
    // This class is never actually executed, but when Xamarin linking is enabled it does how to ensure types and properties
    // are preserved in the deployed app
    [Android.Runtime.Preserve(AllMembers = true)]
    public class LinkerPleaseInclude
    {
        public void Include(Button button)
        {
            button.Click += (s, e) => button.Text = button.Text + "";
        }

        public void Include(CheckBox checkBox)
        {
            checkBox.CheckedChange += (sender, args) => checkBox.Checked = !checkBox.Checked;
        }

        public void Include(Switch @switch)
        {
            @switch.CheckedChange += (sender, args) => @switch.Checked = !@switch.Checked;
        }

        public void Include(View view)
        {
            view.Click += (s, e) => view.ContentDescription = view.ContentDescription + "";
        }

        public void Include(TextView text)
        {
            text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;
            text.Hint = "" + text.Hint;
        }

        public void Include(CheckedTextView text)
        {
            text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;
            text.Hint = "" + text.Hint;
        }

        public void Include(CompoundButton cb)
        {
            cb.CheckedChange += (sender, args) => cb.Checked = !cb.Checked;
        }

        public void Include(SeekBar sb)
        {
            sb.ProgressChanged += (sender, args) => sb.Progress = sb.Progress + 1;
        }

        public void Include(RadioGroup radioGroup)
        {
            radioGroup.CheckedChange += (sender, args) => radioGroup.Check(args.CheckedId);
        }

        public void Include(RadioButton radioButton)
        {
            radioButton.CheckedChange += (sender, args) => radioButton.Checked = args.IsChecked;
        }

        public void Include(RatingBar ratingBar)
        {
            ratingBar.RatingBarChange += (sender, args) => ratingBar.Rating = 0 + ratingBar.Rating;
        }

        public void Include(Activity act)
        {
            act.Title = act.Title + "";
        }

        public void Include(INotifyCollectionChanged changed)
        {
            changed.CollectionChanged += (s, e) => { var test = $"{e.Action}{e.NewItems}{e.NewStartingIndex}{e.OldItems}{e.OldStartingIndex}"; };
        }

        public void Include(ICommand command)
        {
            command.CanExecuteChanged += (s, e) => { if (command.CanExecute(null)) command.Execute(null); };
        }

        public void Include(MvvmCross.IoC.MvxPropertyInjector injector)
        {
            injector = new MvvmCross.IoC.MvxPropertyInjector();
        }

        public void Include(System.ComponentModel.INotifyPropertyChanged changed)
        {
            changed.PropertyChanged += (sender, e) =>
            {
                var test = e.PropertyName;
            };
        }

        public void Include(MvxTaskBasedBindingContext context)
        {
            context.Dispose();
            var context2 = new MvxTaskBasedBindingContext();
            context2.Dispose();
        }

        public void Include(MvxNavigationService service, IMvxViewModelLoader loader)
        {
            service = new MvxNavigationService(null, loader);
        }

        public void Include(ConsoleColor color)
        {
            Console.Write("");
            Console.WriteLine("");
            color = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Red;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.ForegroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.ForegroundColor = ConsoleColor.DarkGray;
        }
    }
}