使用子用户控件中的按钮关闭弹出窗口
本文关键字:窗口 按钮 用户 控件 | 更新日期: 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}"
应该就是这样。。。祝你好运