我有我的WPF控件设置,以便它只有下面的代码:如何绑定到用户控件的父窗口IsActive属性
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;
};
最大的问题是,已经完成我不能让父窗口,直到控制负载和数据绑定?我是否需要创建一个附加的行为,这对于简单的绑定来说是相当多的痛苦。
你有没有试图改变结合“变种isActiveWindowBinding =新的绑定(‘IsActive’){源=模型。 IsActive,UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged};'你的IsActive **属性**实现了一个PropertyChanged方法 –
@Bob我会试一下,但它仍然会污染什么可能是这样一个干净的代码隐藏,这是我的问题的主要部分 –