سؤال

عند استخدام جوش سميث RelayCommand, ، معظم الأمثلة التي رأيتها تستخدم التهيئة كسول مثل:

public class ViewModel
{
    private ICommand myCommand;

    public ICommand MyCommand
    {
        get
        {
            if (myCommand == null)
            {
                myCommand = new RelayCommand(p => DoSomething() );
            }

            return myCommand;
        }
    }
    // ... stuff ...

}

بدلاً من إنشاء RelayCommand في المنشئ ، مثل هذا:

public class ViewModel
{
    public ViewModel()
    {
            MyCommand = new RelayCommand(p => DoSomething());
    }

    public ICommand MyCommand
    {
        get;
        private set;

    }

    // ... stuff ...
}

ما هي فائدة استخدام التهيئة كسول هنا؟ سيتعين عليه استدعاء خاصية GET عند إعداد الربط ، لذلك لا يمكنني رؤية سبب لاستخدام هذه الطريقة على إعدادات الأشياء في المنشئ.

نسيت شيئا ما هنا؟

هل كانت مفيدة؟

المحلول

في الواقع ، ستحصل WPF و Silverlight على أمر الترحيل مرة واحدة فقط لكل الربط ، لذلك لا تحتاج حقًا إلى تخزين حقل دعم على الإطلاق:

public ICommand MyCommand
{
    get
    {
        return new RelayCommand(p => DoSomething());
    }
}

لذا ، على الرغم من أنه لا يوجد شيء خاطئ في إنشائها في .ctor كما تقترح ، لا يوجد سبب يذكر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top