首頁 > 後端開發 > C++ > 如何在 WPF 的 MVVM 模式中建立可重複使用的 ICommand 實作?

如何在 WPF 的 MVVM 模式中建立可重複使用的 ICommand 實作?

Susan Sarandon
發布: 2025-01-20 17:36:17
原創
547 人瀏覽過

How Can I Create Reusable ICommand Implementations in WPF's MVVM Pattern?

簡化 WPF MVVM 模式中的 ICommand 實作

在 WPF 的 Model-View-ViewModel (MVVM) 架構中,頻繁的 ICommand 實作很常見。 建立大量單獨的 ICommand 類別可能會導致重複的程式碼。本文提供了可重複使用 ICommand 實作的解決方案,以提高效率。

一個簡單的方法涉及利用兩個委託方法的單一 ICommand 類別:一個用於 Execute,一個用於 CanExecute。 建構函式接受這些委託,並在 ICommand 方法中呼叫它們。

然而,從 Karl Shifflet 的最初概念中提煉出來的一個更好的替代方案是 RelayCommand

利用 RelayCommand

RelayCommand 類別實作 ICommand 接口,分別使用 Action<T>Predicate<T> 表示 ExecuteCanExecute。這為 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>
登入後複製

RelayCommand 整合到 ViewModel 類別中可以簡化 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>
登入後複製

總結

雖然帶有委託的自訂 ICommand 實作很實用,但 RelayCommand 提供了更優雅、更靈活的解決方案。 採用 RelayCommand 顯著簡化了 MVVM 專案中的 ICommand 實作。

以上是如何在 WPF 的 MVVM 模式中建立可重複使用的 ICommand 實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板