使用子usercontrol中的按钮关闭弹出窗口

时间:2015-12-07 15:31:22

标签: c# xaml popup parent-child uwp

我正在处理一个具有用户控件作为孩子的弹出窗口。这是在使用Visual Studio 2015的UWP中的XAML文件中完成的。
在我的usercontrol中有一个按钮,我想用它来关闭父级弹出窗口。我似乎无法做到这一点 - 我已经尝试了几个选项,最接近的是使用了一个relay命令。应该提到弹出窗口应该弹出。
这是popup with usercontrol child.无命名空间问题,因为弹出窗口正在工作。
这是button in the usercontrol.

我的方法应该是什么?我为此使用了ViewModels(MVVM设计),并且两个usercontrol都可以访问ViewModel类的同一个实例。

干杯!

1 个答案:

答案 0 :(得分:2)

看看https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.isopen(v=vs.110).aspx。将Popup.IsOpen绑定到视图模型中的属性...按钮将属性设置为false。

<Popup IsOpen="{Binding ViewModel.IsOpen}" >
  ...
</Popup>

在ViewModel中,您可以定义一个可以附加到AddCriteria按钮的命令:

private ICommand _AddCriteriaCommand;
  public ICommand AddCriteriaCommand
  {
     get
     {
        return _AddCriteriaCommand;
     }
     set
     {
        _AddCriteriaCommand = value;
     }
  }

然后在构造函数或AddCriteriaCommand的getter中将此命令发送到RelayCommand ......就这样

public VMConstructor(...)
{
    _AddCriteriaCommand = new RelayCommand(execute => ClosePopup(), canExecute => true);
}

private void ClosePopup()
{
   _IsOpen = false;
}
你的xaml中的

将commadn分配给AddCriteria按钮,类似于

<local:AddCrteria Command="{Binding AddCriteriaCommand}" />

对于弹出窗口,您只需为其创建一个属性,其中包含更改通知:

private bool _isOpen;
public bool IsOpen
{
  get { return _isOpen; }
  set
  {
    if (_isOpen == value) return;
    _isOpen = value;
    RaisePropertyChanged("IsOpen");
  }
}

最后将Popup控件的IsOpen属性绑定到ViewModel的属性:

IsOpen="{Binding IsOpen}"

那应该是它......祝你好运。