次のコードのみが含まれるように、WPF コントロールを設定しました。
InitializeComponent();
DataContext = model;
ただし、ウィンドウがアクティブでないときに特定のアクションを発生させたくないという問題が発生したため、ViewModel に IsActive フラグを作成しましたが、コードはウィンドウではなくユーザー コントロールから取得されているため、ユーザーコントロールにコードビハインドがないと、これを行うことはできません。これは私ができる最善のことですか、それともこれに対する真のMVVMアプローチはありますか
これを試してみましたが、IsActiveProperty
データ バインドできないというランタイム エラーが発生しました。
Loaded += (sender, args) =>
{
var parentWindow = Window.GetWindow(this);
if (parentWindow == null)
return;
var isActiveWindowBinding = new Binding {Source = model.IsActive};
parentWindow.SetBinding(Window.IsActiveProperty, isActiveWindowBinding);
};
だから、私はこれをしていません:
Loaded += (sender, args) =>
{
var parentWindow = Window.GetWindow(this);
if (parentWindow == null)
return;
parentWindow.Activated += (o, eventArgs) => model.IsActive = true;
parentWindow.Deactivated += (o, eventArgs) => model.IsActive = false;
};
最大の問題は、コントロールが読み込まれてデータバインディングが完了するまで、親ウィンドウを取得できないことです。アタッチされた動作を作成する必要がありますか?これは、単純なバインドでは非常に面倒です。