Dalam seni bina Model-View-ViewModel (MVVM) WPF, pelaksanaan ICommand yang kerap adalah perkara biasa. Mencipta banyak kelas ICommand individu boleh membawa kepada kod berulang. Artikel ini menawarkan penyelesaian untuk pelaksanaan ICommand boleh guna semula untuk meningkatkan kecekapan.
Pendekatan mudah melibatkan satu kelas ICommand yang memanfaatkan dua kaedah perwakilan: satu untuk Execute
dan satu untuk CanExecute
. Pembina menerima perwakilan ini, menggunakan mereka dalam kaedah ICommand.
Namun, alternatif unggul, diperhalusi daripada konsep awal Karl Shifflet, ialah RelayCommand
.
Kelas RelayCommand
melaksanakan antara muka ICommand
, masing-masing menggunakan Action<T>
dan Predicate<T>
untuk Execute
dan CanExecute
. Ini menawarkan kaedah yang lebih padat dan boleh disesuaikan untuk pelaksanaan ICommand.
<code class="language-csharp">public class RelayCommand : ICommand { private readonly Predicate<object> _canExecute; private readonly Action<object> _execute; public RelayCommand(Predicate<object> canExecute, Action<object> execute) { _canExecute = canExecute; _execute = execute; } // ICommand implementation // ... }</code>
Menyepadukan RelayCommand
ke dalam kelas ViewModel memudahkan instantiasi ICommand.
<code class="language-csharp">public class MyViewModel { private ICommand _doSomething; public ICommand DoSomethingCommand { get { if (_doSomething == null) { _doSomething = new RelayCommand( p => this.CanDoSomething(), p => this.DoSomeImportantMethod()); } return _doSomething; } } }</code>
Walaupun pelaksanaan ICommand tersuai dengan perwakilan berfungsi, RelayCommand
menyediakan penyelesaian yang lebih elegan dan fleksibel. Mengguna pakai RelayCommand
memperkemas pelaksanaan ICommand dengan ketara dalam projek MVVM.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Pelaksanaan ICommand Boleh Digunakan Semula dalam Corak MVVM WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!