如何使用自定义控件对属性进行绑定?

时间:2019-07-12 14:59:57

标签: xamarin binding custom-controls

我创建了一个自定义条目,如您在此处看到的:

public class ExtendedEntry : Entry
{

    public static readonly BindableProperty BorderColorProperty =
        BindableProperty.Create(nameof(BorderColor), typeof(Color), 
typeof(ExtendedEntry), Color.Gray);
    public Color BorderColor
    {
        get { return (Color) GetValue(BorderColorProperty); }
        set { SetValue(BorderColorProperty, value); }
    }
}

我创建一个这样的自定义渲染器:

[assembly: ExportRenderer(typeof(ExtendedEntry), typeof(MyEntryRenderer))]
namespace LogiStock.UWP.CustomRenderers
{
public class MyEntryRenderer : EntryRenderer
{
    ExtendedEntry entry;
    protected override void 
OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);
        entry = (ExtendedEntry)Element;
        if (Control != null)
        {
            var converter = new ColorConverter();


            Control.BorderBrush = 
(SolidColorBrush)converter.Convert(entry.BorderColor, null, null, null);
        }
    }
}
}

我在这样的xaml中使用了自定义控件:

<controls:ExtendedEntry BorderColor="{Binding ColorError, Mode=TwoWay}"/>

最后,如果没有输入,我将在视图模型中进行测试,如果输入为空,我将不显示颜色:

if (string.IsNullOrWhiteSpace(Libelle))
        {

            ColorError = Color.Red;

        }

但是我控件的borderColor并没有改变。 我不知道我在做什么错..

1 个答案:

答案 0 :(得分:0)

我的问题有答案:

我在渲染器中覆盖了OnElementPropertyChanged,并在我的属性ÌNotifyPropertyChanged的类中实现了接口ColorError