2012-02-17 60 views

回答

2

我想,既然你提到MVVM,你想從您的視圖模型做到這一點?

在這種情況下,我的建議是從視圖模型將消息發送到視圖。 在視圖中,您添加對此消息的訂閱並從那裏添加網格。

你可以做這樣的事情,在其最簡單的形式。這將是使用優秀MVVM Light framework

ViewModel.cs:

private void CreateGrid() 
{ 
    Messenger.Default.Send<NotificationMessage>(new NotificationMessage("CreateGrid")); 
} 

View.xaml.cs:

Messenger.Default.Register<NotificationMessage>(this, nm => 
{ 
    if (nm.Notification != "CreateGrid") return; 
    // Create grid here 
}); 
1

如果你在運行時動態添加控件,簡單的答案是,你可能不會成功這樣做,通過MVVM。將代碼隱藏到代碼隱藏中可能是你最好的選擇 - 不知道你在構建什麼樣的應用程序,很難通過判斷並大聲要求你必須使用MVVM。

話雖這麼說,我很少與WPF的情況下我必須做這樣的動態控制操作發現自己。相反,我結束了使用不同的WPF構造(ListBox,ContentControl,ItemsControl等),以及諸如ItemTemplates之類的東西來獲得我想要的。

同樣,不知道更多關於你正在試圖完成的任務,這是很難給出任何形式的規範性指導。

+0

編寫代碼後,並不意味着它是不可能使用MVVM。只要代碼隱藏僅與視圖相關(並且在運行時創建控件純粹與視圖相關),那麼IMO對模式完全沒問題。 – ken2k 2012-02-17 14:36:25

+0

@ ken2k我同意。原文是從MVVM的角度詢問如何實現這一點,這就是爲什麼我以我的方式回答問題的原因。我不認爲使用代碼隱藏可以避免在應用程序的其他地方實現MVVM方法。 – Robaticus 2012-02-17 14:41:42