3

Caliburn.Micro を試す最初のプロジェクトでは、多くのことが気に入っています :-)

私が見逃している (またはまだ発見していない) ことの 1 つは、ビューモデルとコマンドを分離する方法です。CM は ICommand をサポートしていません。これは、物事を行う方法が優れているためです。私はそれが本当だと確信しているので、これを達成するか、おそらくより良い方法を発見するために、正しい方向に少しプッシュしたいと思います.

私が理解しているように、「Execute」メソッドと「CanExecute」プロパティをviewmodelに直接配置し、ビュー内のコントロールに一致するように名前を付けて、魔法を機能させる必要があります。

ビューモデルのプロパティである別のオブジェクトに「Execute」と「CanExecute」を配置したい場合、CMは通常どおりコントロール名とプロパティ名を使用して、そのオブジェクトに自動的にバインドします。

Caliburn Micro のフォーラムから再投稿しました。回答が得られなかったので、ここで運試しをしています。

4

2 に答える 2

2

ファットな ViewModel を避けるには、ファットなビューも避ける必要があります。Caliburn.Micro を使用すると、 Screens 、 Conductors 、および Composition で説明されているように、Views/ViewModels を構成できます。

短いバージョンでは、MasterViewModel で DetailViewModel タイプのプロパティを定義し、それにちなんで名付けられた ContentControl を MasterView に追加することで、「MasterView」/「MasterViewModel」シェルに「DetailView」と「DetailViewModel」のペアを含めることができます。バインドとアクションは通常どおり機能するため、ファットなモデル/ビューとコマンドのルーティングの両方を回避できます。

もう 1 つのオプションは、詳細のプロパティをターゲットの名前の先頭に追加して、MasterView 要素を DetailViewModel プロパティまたはアクションにバインドすることです。特定の URL がまだ見つからないため、例は記憶からのものです。

次のクラスがあると仮定します。

public class MasterViewModel:Screen
{
    public property DetailViewModel MyDetails{get;set;}
}

public class DetailViewModel:Screen
{
    public property string SomeText{get;set;}

    public void DoTheBoogie(){}
}

「MyDetails_SomeText」という名前のMasterViewにコントロールを追加して、DetailViewModel.SomeTextにバインドできます。同じ方法で DoTheBoogie にバインドすることもできます。

ただし、DetailView という名前の別のビューを作成し、MasterView に「MyDetails」という名前の ContentControl を追加することを好みます。これにより、よりクリーンでモジュール化された設計が実現します

于 2013-08-08T14:56:43.343 に答える