はい、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>
カリバーンで出始めて、ちょうどあなたの非常に有用な記事に出くわした - ...今のUserControlを使用してビットを拡大する可能性が同じくらい...ビューafaicsがあることを行っていますusercontrolではないですか? thxvm –
はい、Caliburn.Microでは、依存関係プロパティを持つユーザーコントロールの意味でユーザーコントロールを使用せず、別のユーザーコントロール/ウィンドウなどからコントロールを直接インスタンス化します。 – devdigital
ok ...でも、 、ユーザーコントロールのグリッド(viewmodel/xamlのすべてのカスタムビヘイビアを使用)、Caliburn.Micro経由でContentControlに動的にロードされますか? (ちょうど私が何かを逃していないことを確認したい)。 Thx非常に再び。 –