سؤال

كيف يمكنني استخدام RelayCommand في وبف؟

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

المحلول

أمر Relay غير موجود في WPF، فهو مجرد فئة خارجية ارتفعت إلى الصدارة بعد تعريفها في مقالة MSDN هذه.عليك أن تكتبه بنفسك إذا كنت تريد استخدامه.

وإلا يمكنك استخدام أمر التفويض من مجموعة أدوات WPF هنا الذي يحتوي على القليل من الوظائف الإضافية عبر رمز RelayCommand.


آه، تغير السؤال بينما كنت أكتب هذه الإجابة.بافتراض أنك تستخدم RelayCommand كما هو محدد أعلاه، فأنت بحاجة إلى تزويده بمفوض واحد أو اثنين، أحدهما يُرجع منطقيًا يحدد ما إذا كان الأمر في حالة صالحة ليتم تشغيله، والثاني لا يُرجع شيئًا ويقوم بالفعل بتشغيل الأمر يأمر.إذا لم تقم بتوفير مفوض "CanRun"، فسيعتبر الأمر أنه دائمًا في حالة صالحة.الكود المستخدم في المقال:

RelayCommand _saveCommand;
public ICommand SaveCommand
{
    get
    {
        if (_saveCommand == null)
        {
            _saveCommand = new RelayCommand(param => this.Save(),
                param => this.CanSave );
        }
        return _saveCommand;
    }
}

يقوم بتعريف RelayCommand الذي سيقوم باستدعاء الأسلوب Save() عند تشغيله وإرجاع خاصية CanSave كاختبار للتحقق من الصلاحية.عندما يرتبط هذا الأمر بزر في WPF، فإن خاصية IsEnabled الخاصة بالزر سوف تتطابق مع خاصية CanSave الخاصة بـ ViewModel وعند النقر فوق الزر (بافتراض تمكينه) سيتم استدعاء طريقة Save() على ViewModel.

نصائح أخرى

وكبديل لخلق مغلفة RelayCommand لجميع وسائل الخاص بك يمكن أن أقترح مكتبة مجانية ومصدر من شأنها أن تسمح لك لاستخدام {BindTo Save()} ملزمة. أنا خلقت ذلك لتبسيط الارتباطات بلدي. كما أنه يجعل ملزم بالنسبة أسهل بكثير. يمكنك العثور عليها هنا: http://www.simplygoodcode.com/2012 /08/simpler-wpf-binding.html

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