2012-03-06 2 views
17

私は初心者のWPFプログラマーです。私は私のコードにいくつかの構造を追加しようとしています:ユーザーコントロールとMVVMの両方。Caliburn.Microはユーザーコントロールでうまく動作しますか?

ここで調べると、people recommend Caliburn.Microが見つかりました。一方、私は、Caliburn.MicroがUserControlsをうまく使っていないことについて、hereelsewhereという苦情を見つけました。

私の質問はです。Caliburn.Microはユーザーコントロールでうまく動作しますか?

答えて

36

はい、Caliburn.Microは、ユーザーコントロールでうまくいきます。それは、説得力のあるフレームワークですが、特定の開発経路を強制的に排除する点ではありません。リンクされた質問の答えが示唆するように、特に問題がある場合は、いつもの古いWPFバインディングを使用することができます。

実際、私はこれらの2つのリンクがあなたを抑止しないようにしたいと思います。最初は、個別のプロパティを1つのユーザーコントロールにバインドする方法を説明しています。より良い解決策はおそらく、というカスタムでItemsControlを使用し、次にプロパティ名と値を含むビューモデル上にDTOのコレクションを作成することです。

2番目のリンクは、ビュー(UserControl)を作成してXAMLでビューのインスタンスを作成し、それをビューモデルにバインドしてビューを最初に呼び出す方法を示していますCaliburn.Microを伝えるビューモデルがバインドする場所:だから

<UserControl ... 
    cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" /> 

、これは概念的には、あなたが、実際にはその他の依存関係プロパティでのviewmodel /ビューではなく、ユーザーコントロールとしての

を考えることができます。 Caliburn.Microを使用すると、ビュー構成を実行するために、おそらくより少ない数の「UserControl」を使用します。これは、ビュー・モデル、ビュー、およびビュー・モデルの第1のアプローチを使用して、再利用可能なUI部分を作成するのは非常に簡単なためです。

親ビューモデルのビューモデルプロパティと同じ名前のビューにContentControlがある場合、Caliburn.Microは対応するビューモデルのビューを見つけてContentControlに挿入してバインドアップしますビュー/ビューモデル例えば

public class MyParentViewModel : Screen 
{ 
    public MenuViewModel MenuViewModel { get; set; } 

    public DetailsViewModel DetailsViewModel { get; set; } 

    public MyParentViewModel() 
    { 
    this.MenuViewModel = new MenuViewModel(); 
    this.DetailsViewModel = new DetailsViewModel(); 
    } 
} 

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".2*" /> 
    <ColumnDefinition Width=".8*" /> 
    </Grid.ColumnDefinitions> 

    <ContentControl Grid.Column="0" x:Name="MenuViewModel" /> 
    <ContentControl Grid.Column="1" x:Name="DetailsViewModel" /> 

</Grid> 
+0

カリバーンで出始めて、ちょうどあなたの非常に有用な記事に出くわした - ...今のUserControlを使用してビットを拡大する可能性が同じくらい...ビューafaicsがあることを行っていますusercontrolではないですか? thxvm –

+2

はい、Caliburn.Microでは、依存関係プロパティを持つユーザーコントロールの意味でユーザーコントロールを使用せず、別のユーザーコントロール/ウィンドウなどからコントロールを直接インスタンス化します。 – devdigital

+0

ok ...でも、 、ユーザーコントロールのグリッド(viewmodel/xamlのすべてのカスタムビヘイビアを使用)、Caliburn.Micro経由でContentControlに動的にロードされますか? (ちょうど私が何かを逃していないことを確認したい)。 Thx非常に再び。 –

関連する問題