在子用户控件中使用按钮关闭弹出窗口

Closing popup with button in child usercontrol

我正在处理一个带有子用户控件的弹出窗口。这是在 UWP 的 XAML 文件中使用 Visual Studio 2015 完成的。
在我的用户控件中有一个按钮,我想用它关闭育儿弹出窗口。我似乎无法做到这一点——我尝试了几种选择,最接近的是使用中继命令。应该提到的是弹出窗口按预期弹出。
这是 popup with usercontrol child. 没有名称空间问题,因为弹出窗口正在运行。
这是 button in the usercontrol.

我的方法应该是什么?我正在为此使用 ViewModels(MVVM 设计),并且两个用户控件都可以访问 ViewModel class.

的相同实例

干杯!

看看 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 中将命令分配给 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:

IsOpen="{Binding IsOpen}"

应该就是这样了……祝你好运。