我有我的 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;
};
最大的问题是在控件加载和数据绑定完成之前我无法获取父窗口?我是否必须创建一个附加的行为,这对于简单的绑定来说是相当痛苦的。