我有一些可重用的ContentControl,它充當另一個視圖內的僞模式彈出窗口。 它總是在那裏,只有它的可見度纔會出現或消失。 實例化時,ContentControl內會有一個自定義ContentTemplate,綁定到某個ViewModel並表示「模態彈出」的內容。如何讓ContentControl監聽其ContentTemplate中的非路由事件
<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,會觸發事件,周圍ModalDialog應由其VisibilityProperty設置爲隱藏的「閉合」。
彈出窗口(此處爲ItemEditorView)中的視圖不應該在意它是否顯示在ModalDialog或其他上下文中,即它甚至不應該知道這樣的類存在。這排除了通過邏輯樹或可視化樹的漫步。 當按下取消/保存按鈕時,它只能觸發CloseMe事件。此外,該機制不應該在實例化ModalDialog的視圖中實現/配置,該視圖應儘可能愚蠢。
相反,「外部」ModalDialog應該執行活動部分並監聽CloseMe事件。 如何以一種相當乾淨,符合MVVM的方式實現這一點,而不引入不必要的依賴關係? ContentTemplate初始化後是否有任何事件發生,s.t.那麼ModalDialog可以評估它,如果它的根擴展了ICloseMe?
從沒有創建額外的依賴關係的意義上說可以,但是如何將ModalDialog連接到ItemEditorView的Closed-Property? – 2009-12-07 14:34:23