繁体   English   中英

如何绑定到用户控件的父窗口IsActive属性

[英]How to bind to user control's parent window IsActive property

我设置了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;
              };

最大的问题是,直到控件加载并且数据绑定已经完成,我才能获取父窗口? 我是否必须创建一个附加的行为,这对于简单的绑定是非常痛苦的。

不绑定吗?

<Window IsActive="{Binding Path=IsActive, Mode=OneWayToSource}"/>

这意味着已设置窗口的DataContext。

或者,如果您想在用户控件标记中使用窗口的状态,请尝试以下绑定:

PropValue="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=IsActive}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM