我有一些可重用的ContentControl,它在另一个视图中充当伪模式弹出窗口。 它总是在那里,只有它的可见性使它出现或消失。 实例化时,在ContentControl中将有一个自定义的ContentTemplate,绑定到某个ViewModel并表示“模态弹出窗口”的内容。
<Dialogs:ModalDialog DialogHost="{Binding ElementName=layoutRoot, Mode=OneTime}"
Content="{Binding ViewModel.CurrentEditItem}"
IsShown="{Binding ViewModel.IsInEdit}">
<Dialogs:ModalDialog.ContentTemplate>
<DataTemplate>
<ItemEditor:ItemEditorView />
</DataTemplate>
</Dialogs:ModalDialog.ContentTemplate>
</Dialogs:ModalDialog>
现在我想达到以下目的:ContentTemplate的根目录(此处为:ItemEditorView)应该实现以下接口。
public interface ICloseMe
{
event EventHandler<EventArgs> CloseMe;
}
每当触发CloseMe-Event时,应通过将其VisibilityProperty设置为Hidden来“关闭”周围的ModalDialog。
弹出窗口中的视图(此处为ItemEditorView)不应该关心它是否显示在ModalDialog或其他上下文中,即它甚至不应该知道这样的类存在。这不包括遍历逻辑或可视树。 当按下取消/保存按钮时,它只会触发CloseMe-Event。
此外,不应在实例化ModalDialog的视图中实现/配置该机制,视图应尽可能愚蠢。
相反,“外部”ModalDialog应该执行活动部分并侦听CloseMe事件。 如何以一种相当干净,符合MVVM的方式实现它,而不会引入不必要的依赖?是否有任何事件,在初始化ContentTemplate后发生,s.t。然后ModalDialog可以评估,如果它的根扩展ICloseMe?
答案 0 :(得分:0)
如何使ICloseMe
包含一个Closed
属性,您可以在XAML中设置触发器?