لماذا تستخدم RelayCommands عادة التهيئة البطيئة؟
-
04-10-2019 - |
سؤال
عند استخدام جوش سميث 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 كما تقترح ، لا يوجد سبب يذكر.
لا تنتمي إلى StackOverflow