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

本文关键字:窗口 按钮 用户 控件 | 更新日期: 2023-09-27 18:26:08

我正在处理一个弹出窗口,它有一个用户控件作为子控件。这是使用Visual Studio 2015在UWP中的XAML文件中完成的
在我的用户控件中有一个按钮,我想用它来关闭育儿弹出窗口。我似乎无法实现这一点——我尝试了几个选项,最接近的是使用中继命令。需要注意的是,弹出窗口会按预期弹出。
这是带有usercontrol子项的弹出窗口。没有名称空间问题,因为弹出窗口正在工作
这是用户控件中的按钮。

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

干杯!

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

看看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}"

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