单击我的按钮即可更改我的自定义输入的颜色 [英] Change of color de my custom enter once is clicked my button

查看:63
本文介绍了单击我的按钮即可更改我的自定义输入的颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理custon条目,我需要在单击按钮时听到自定义渲染中xaml的声音

im working with custon entry rendered, i need to hear from xaml in my custom render when i clicked my button

我的xaml中有此代码

i have this code in my xaml

<local:MyEntry   eventRefresh="true">

当我单击按钮时,此功能已激活

when i clicked my button this function is actived

private async void Execute(object sender)
        {
    var entry = ((MyEntry)view);
    entry.eventRefresh = "false";

但是我的EntryRendered听不到更改

but my EntryRendered donot hear the change

protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                var element = Element as MyEntry;               

推荐答案

您应将属性 eventRefresh 定义为可绑定属性.

You should define the property eventRefresh as Bindable Property .

using System;

using System.ComponentModel;
using System.Runtime.CompilerServices;

using Xamarin.Forms;
namespace xxx
{
    public class MyEntry:Entry,INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public static readonly BindableProperty eventRefreshProperty = BindableProperty.Create("eventRefresh", typeof(bool), typeof(MyEntry), true,propertyChanged:(obj,oldValue,newValue)=> {

            //var entry = obj as MyEntry;

          //  entry.Text = newValue.ToString();


        });

        bool refresh;
        public bool eventRefresh
        {
            get { return refresh; }
            set {
                  if(refresh !=value)
                  {
                    refresh = value;
                    NotifyPropertyChanged("eventRefresh");
                  }

              }
        }



        public MyEntry()
        {

        }



    }
}

xaml

<StackLayout  VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand">


   <local:MyEntry eventRefresh="{Binding Refresh}" BackgroundColor="{Binding BGcolor}" WidthRequest="200" HeightRequest="50" />

   <Button Command="{Binding ClickCommand}"  />


</StackLayout>

在视图模型中

public class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    Color color;
    public Color BGcolor
    {
        get { return color; }

        set
        {

            if (color != value)
            {
                color = value;
                NotifyPropertyChanged("BGcolor");
            }

        }
    }


    bool refresh;


    public bool Refresh
    {
        get { return refresh; }
        set
        {
            if (refresh != value)
            {
                refresh = value;
                NotifyPropertyChanged("Refresh");
            }

        }
    }



    public ICommand ClickCommand { get; set; }

    public MyViewModel()
    {
        BGcolor = Color.LightPink;


        ClickCommand = new Command(()=> {


            BGcolor = Color.Red;

        });


    }



}

在自定义渲染器中


using System.ComponentModel;
using Android.Content;

using xxx;
using xxx.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly:ExportRenderer(typeof(MyEntry),typeof(NyEntryRenderer))]
namespace xxx.Droid
{
    public class NyEntryRenderer : EntryRenderer
    {
        public NyEntryRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if(Control!=null)
            {
                Element.TextChanged += Element_TextChanged;
            }

        }

        private void Element_TextChanged(object sender, TextChangedEventArgs e)
        {
            // var content = Element.Text;
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == MyEntry.BackgroundColorProperty.PropertyName)
            {
                //  will been invoked when click button
            }


        }
    }
}

这篇关于单击我的按钮即可更改我的自定义输入的颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆