0

この質問は簡単ですが、その方法を正確に把握できません。

WPF を使用することにしましたが、MVVM パターンの一部を従来の方法で実装したくありません。

私のプロジェクトでは、INPC でモデルを作成し、それらを View-Model であるかのように XAML へのフィードとして使用することにしました
。 INPC->)モデル

私が設計したのは、
View(<-Binding->)Model.

もちろん、制約はモデルが INPC を実装する必要があることですが、実際には従来の MVVM と比較して (モデルも INPC を実装する必要があります)、これは DRY 原則に導かれた生産的なショートカットとして完全に問題ないと思います。

コマンドもサポートしたいです。コマンドの概念が好きで、ビューモデルを使用するときにコマンドを実装する方法を理解しています。ただし、説明したように、ビューモデルをスキップすることにしました。

したがって、次のようにコマンドを記述したとします。

public class MyCommand : ICommand
{
    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
    //do somthing
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }
}

そして、私の XAML は次のようになります。

<UserControl x:Class=... blah blah...
 xmlns:Model="clr-namespace:MyProject.BusinessLogic.Person"
 xmlns:Commands="clr-namespace:MyProject.Commands">

<TextBox Text="{Binding FirstName}" />
<Button Command="What do I put here?" />

<UserControl>

では、MyCommand (モデルにはありません) を呼び出せるようにするには、ボタン コマンドに何を入力すればよいでしょうか?

4

2 に答える 2

1

ビュー モデルが必要であり、コマンドを含むプレゼンテーション ロジックをそこに配置する必要があります。

ICommandモデルは名前空間にあるため、明らかにetc.への参照を持つことはできません。System.Windows.Inputそのため、モデルとビューを橋渡しするタイプ、つまりビューモデルが必要です。

パターンに完全に従わず、すべてのビュー モデル呼び出しをモデルに委譲したくない場合は、モデルをビュー モデルのプロパティとして公開できます。

もう 1 つの考慮事項は、MVVM を実行している場合は、実際には MVVM フレームワークを使用する必要があるということです。それらは、制限のあるコマンドの代替手段を提供します。

たとえば、Button有効になっていないときに a が非表示になるように UI を再考したい場合、コマンドを使用してこれを簡単に実現することはできません。

Caliburn.Microなどの MVVM フレームワークは、コマンドよりも多くの利点を提供する Actions を提供します

于 2013-04-15T18:05:36.367 に答える
1

これを読みたいかもしれません: http://wpfglue.wordpress.com/2012/05/07/commanding-binding-controls-to-methods/

アイデアは、モデル内のメソッドを呼び出す CommandBinding を作成できる再利用可能なコンポーネントを用意し、XAML で構成できるようにすることです。したがって、「配管」はこれらのコンポーネントによって行われ、モデルはビジネス関連のメソッドのみを実装します。

これは、私が ViewModelKit と呼ぶものに一般化できます。つまり、XAML でリソースとして組み立てることができ、ViewModel の一般的なジョブをカバーする一連のコンポーネントです。

于 2013-04-15T19:50:47.107 に答える