我正在处理一个具有用户控件作为孩子的弹出窗口。这是在使用Visual Studio 2015的UWP中的XAML文件中完成的。
在我的usercontrol中有一个按钮,我想用它来关闭父级弹出窗口。我似乎无法做到这一点 - 我已经尝试了几个选项,最接近的是使用了一个relay命令。应该提到弹出窗口应该弹出。
这是popup with usercontrol child.无命名空间问题,因为弹出窗口正在工作。
这是button in the usercontrol.
我的方法应该是什么?我为此使用了ViewModels(MVVM设计),并且两个usercontrol都可以访问ViewModel类的同一个实例。
干杯!
答案 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}"
那应该是它......祝你好运。