Xamarin 如何编写一个类来接收用于自定义渲染器的属性?

Xamarin 如何编写一个类来接收用于自定义渲染器的属性?,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我见过这种编码风格: public CustomTextCell() { } public static readonly BindableProperty IsCheckedProperty = BindableProperty.Create( "IsChecked", typeof(bool), typeof(CustomTextCell), defaultValue: false); public

我见过这种编码风格:

    public CustomTextCell()
    {
    }

    public static readonly BindableProperty IsCheckedProperty =
    BindableProperty.Create(
            "IsChecked", typeof(bool), typeof(CustomTextCell),
        defaultValue: false);

    public bool IsChecked
    {
        get { return (bool)GetValue(IsCheckedProperty); }
        set { SetValue(IsCheckedProperty, value); }
    }
}
这是:

public class ExtViewCell : ViewCell
{
    public bool NoTap { get; set; }
}
有人能解释一下这种区别吗。一个服务于另一个不同的功能吗?在我的例子中,我只需要将NoTap的值传递给自定义渲染器。我应该像第一个或第二个示例那样编写代码吗

第二个是POCO——一个普通的旧C#对象——它相对来说是不言自明的,但与保存数据相比作用不大——在本例中也没有那么大

第一个更有趣,特别是在MVVM的上下文中
SetValue
不仅仅是设置值,而且(在大多数情况下)会引发
PropertyChanged
事件(请参阅),通知订阅者某个属性已经更改

现在这与您的自定义渲染器有什么关系?您可以将视图中的属性实现为普通属性(即没有通知),并且在最初设置
IsChecked
时(并且没有绑定),它可能会起作用(但无法判断,因为我不知道您的自定义渲染器)。无论如何,假设您将更新
IsChecked
的值。您可以从代码中执行此操作,并想知道为什么此更改没有反映在自定义渲染器中但是渲染器应该如何知道呢?对于较小的表单,轮询每个属性可能是可能的,但这是一种严重的资源浪费。(而Xamarin.Forms就是不能这样工作。)您将看到页面/视图必须告诉您的自定义呈现程序,某些内容已经更改<代码>InotifyProperty已更改以进行救援。在自定义渲染器中,您可以订阅
PropertyChanged
事件,并对正在更改的
IsChecked
作出反应,更新本机视图