我使用經典的MVVM模式,將DataTemplats定義爲資源,然後將Content屬性綁定到視圖中的相應ViewModels。該的DataTemplates的定義,像這樣:查看不更新(更改ViewModel但不是ViewModel類型)
<Application.Resources>
<DataTemplate DataType="{x:Type vm:PersonViewModel}">
<vw:PersonView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ProductViewModel}">
<vw:ProductView/>
</DataTemplate>
</Application.Resources>
在視圖中的某個地方我用一個ContentPresenter和綁定的內容屬性
<Grid DataContext={Binding MainViewModel, Source={StaticResource Locator}}"}>
<ContentPresenter Content="{Binding DetailsViewModel}"></ContentPresenter>
</Grid>
在我的用戶界面我有項目列表的左側面板中,讓說人和產品。在右邊,我正在加載每個項目的詳細信息。只要我人之間切換
DetailsViewModel = new ProductViewModel();
:當我點擊我一個人會改變MainViewModel的DetailsViewModel屬性,像這樣:
DetailsViewModel = new PersonViewModel();
如果我點擊一個產品,我會那麼ofcourse做和左側面板中的產品將正確的視圖加載到ContentPresenter中。
但是,這是問題所在。如果我點擊相同類型的一個對象(即單擊人員A,然後單擊人員B),視圖將不會更新以反映ViewModel中的更改。請注意,此時我們創建一個PersonViewModel的新實例並將其分配給DetailsViewModel。設置DetailsViewModel將正確地引發事件,但PersonView的代碼隱藏文件中的InitializeComponent()永遠不會被調用。這裏發生了什麼,我能做些什麼來解決它?
這是什麼意思,你點擊相同類型的對象?反映這種情況的更多代碼將非常感謝。 – Maximus
我的意思是,當我點擊Person A時,我將設置DetailsViewModel = new PersonViewModel(「Person A」);當我點擊另一個人時,我將設置DetailsViewModel = new PersonViewModel(「Person B」);這是在單擊列表時調用的命令內完成的。 DetailsViewModel屬性使用新的視圖模型實例更新,但視圖模型的類型未更改。我希望我的新視圖模型能夠刷新或重新創建視圖,但這不會發生。它只會顯示Person A的數據。 – sunefred