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

C# 使用子用户控件中的按钮关闭弹出窗口,c#,xaml,popup,parent-child,uwp,C#,Xaml,Popup,Parent Child,Uwp,我正在处理一个弹出窗口,它作为一个孩子有一个usercontrol。这是使用Visual Studio 2015在UWP中的XAML文件中完成的在我的用户控件中有一个按钮,我想用它关闭弹出窗口。我似乎无法做到这一点——我尝试了几个选项,最接近的是使用中继命令。应该提到的是,弹出窗口按预期弹出 这是一个没有名称空间问题的示例,因为弹出窗口正在工作 这是你的电话号码 我的方法应该是什么?为此,我使用ViewModels(MVVM设计),两个usercontrol都可以访问ViewModel类的同一个

我正在处理一个弹出窗口,它作为一个孩子有一个usercontrol。这是使用Visual Studio 2015在UWP中的XAML文件中完成的
在我的用户控件中有一个按钮,我想用它关闭弹出窗口。我似乎无法做到这一点——我尝试了几个选项,最接近的是使用中继命令。应该提到的是,弹出窗口按预期弹出
这是一个没有名称空间问题的示例,因为弹出窗口正在工作
这是你的电话号码

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

干杯

看一看。将Popup.IsOpen绑定到视图模型中的属性。。。该按钮将属性设置为false

<Popup IsOpen="{Binding ViewModel.IsOpen}" >
  ...
</Popup>
您可以在构造函数或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}" />
最后将弹出控件的IsOpen属性绑定到ViewModel的IsOpen属性,如下所示:

IsOpen="{Binding IsOpen}"

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

这看起来很整洁。不过,我似乎做得不对。现在,我的xaml文件都无法识别我的ViewModel。这房子是怎么造的?我想我做错了什么<代码>公共bool\u addCriteriaIsOpen;public bool AddCriteriaIsOpen{get{return}AddCriteriaIsOpen;}set{u AddCriteriaIsOpen=!\u AddCriteriaIsOpen;OnPropertyChanged();}}非常感谢!虽然不能调用RaisePropertyChanged,但-我在UWP中工作,而不是WPF,因此我将使用OnPropertyChanged()。我不熟悉UWP,但有些概念应该是相同的,祝你好运。当RaisePropertyChanged更改为OnPropertyChanged时,它起到了很好的作用。再次感谢,我会记下答案的。
private bool _isOpen;
public bool IsOpen
{
  get { return _isOpen; }
  set
  {
    if (_isOpen == value) return;
    _isOpen = value;
    RaisePropertyChanged("IsOpen");
  }
}
IsOpen="{Binding IsOpen}"