2009-12-07 63 views
0

我有一些可重用的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?

回答

0

如何使ICloseMe包含一個Closed屬性,您可以在XAML中設置觸發器?

+0

從沒有創建額外的依賴關係的意義上說可以,但是如何將ModalDialog連接到ItemEditorView的Closed-Property? – 2009-12-07 14:34:23