繁体   English   中英

AutoProperty 和 Member 之间有什么区别

[英]What is the difference between an AutoProperty and Member

MugenMvvmToolkit 中,使用CreateAutoProperty与使用CreateMember时有什么区别。 您何时使用CreateAutoPropertyCreateMember的示例是什么?

CreateAutoProperty类似于 C# 中的 auto 属性,它创建 get、set 和 observe 成员,您可以在此属性更改时进行监听。

CreateMember您可以控制您负责的设置、获取和观察方法的逻辑,您将在其中存储该成员的状态。

public class AttachedPropertySample
{
    private string _autoProperty;
​
    //this is equivalent to AttachedBindingMember.CreateAutoProperty<AttachedPropertySample, string>("AutoProperty", OnAutoPropetyChanged);
    //In auto member you cannot control logic of set and get method you can also listen when this property is changed
    public string AutoProperty
    {
        get { return _autoProperty; }
        set
        {
            _autoProperty = value;
            OnAutoPropetyChanged();
        }
    }

    //this is equivalent to ​AttachedBindingMember.CreateMember<AttachedPropertySample, string>("CustomMember", (info, sample) => "My custom value", (info, sample, arg3) => CustomMemberSetter(arg3))
    //In custom member you can control logic of set, get and observe methods
    public string CustomMember
    {
        get { return "My custom value"; }
        set { CustomMemberSetter(value); }
    }

    private void CustomMemberSetter(string value)
    {

    }
​
    private void OnAutoPropetyChanged()
    {
    }
}

当您需要存储一些值并在此值更改时做出反应时,您可以使用CreateAutoProperty

这是我使用CreateAutoProperty时的示例:

AttachedBindingMember.CreateAutoProperty<ActionBar, bool>("DisplayShowHomeEnabled", (actionBar, args) => actionBar.SetDisplayShowHomeEnabled(args.NewValue));

ActionBar没有DisplayShowHomeEnabled属性,我使用CreateAutoProperty添加了它。

这是我使用CreateMember时的示例:

AttachedBindingMember.CreateMember<IMenuItem, bool>(nameof(IMenuItem.IsVisible), (info, item) => item.IsVisible, (info, item, value) => item.SetVisible(value));

IMenuItem已经有IsVisible getter 和SetVisible方法,我使用CreateMember将它们组合起来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM