MVVMパターン、C#および.NET Framework 4.6.1を使用してWPFを開発しています。別のViewModelからViewModelにアクセスする
私はUserControl(Control1
)を含むウィンドウを持っており、そのUserControlには別のUserControl(Control2
)が含まれています。私はダイアログウィンドウを使用する代わりに、この方法を選択しました(Control2
はダイアログウィンドウとして機能します)。
両方のユーザーコントロールにViewModel(Control1VM
およびControl2VM
)があります。
私は、ユーザーがアプリケーションを起動するために必要ないくつかのデータを入力できるようにフォームとしてControl2
を使用します。
これはControl1
とメインウィンドウです:
そして、これはControl1
オーバーControl2
です。
私の問題は、私はOKまたはキャンセル]ボタンをクリックしたときControl2
を非表示にする方法がわからないということです。
これはControl2
がControl1
に設定されている方法です。Control2
を表示するには
<Grid x:Name="gridControl2" Margin="30" Grid.RowSpan="6" Grid.ColumnSpan="3" Visibility="{Binding GridControl2Visibility}">
<local:Control2 x:Name="userControlControl2" />
</Grid>
とControl1VM
にVisible
にGridControl2Visibility
を設定します。
Control2
を非表示にすることができますどのように
public Visibility GridControl2Visibility
{
get { return gridControl2Visibility; }
set
{
if (gridControl2Visibility != value)
{
gridControl2Visibility = value;
RaisePropertyChangedEvent("GridControl2Visibility");
}
}
}
Control2
のボタン私の問題は、GridControl2Visibility
がControl1VM
にあり、そのクラスにControl2VM
からアクセスできないということです。
一般的な方法は、MVVMツールキットのメッセージング機能です。 – Lennart
ウィンドウ用のVMも作成し、その中にChild VMのインスタンスを保持します。子VMは、その子VMインスタンスで構成されます。この方法で、ウィンドウVMからコード全体を制御できます。 – ViVi