2011-11-10 99 views
2

我正在使用MVVM和WPF一起開發一個項目,並且我處於困境。使用MVVM更改ContentControl WPF的內容?

當我在其中按鈕更改ContentControl的內容的窗口中創建ButtonContentControl時,它工作正常。

<Window.Resources> 
    <me:UserControl1ViewModel x:Key="viewModel" /> 
</Window.Resources> 

<Grid> 
    <Button Content="Button" 
      Name="button1" 
      Command="{Binding Source={StaticResource viewModel}, Path=ClickCommand}" /> 
    <ContentControl Content="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Source={StaticResource viewModel}, Path=View, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" /> 
</Grid> 

但是當我創建了一個用戶控件與一個按鈕,該按鈕改變ContentControl中的內容不工作。 爲什麼?

<Window.Resources> 
    <me:UserControl1ViewModel x:Key="viewModel" /> 
</Window.Resources> 

<Grid> 
    <v:UserControl1 /> 
    <ContentControl Content="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Source={StaticResource viewModel}, Path=View, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" /> 
</Grid> 

用戶控件正在調用的ContentControl中

的內容
<UserControl.Resources> 
    <me:UserControl1ViewModel x:Key="viewModelA" /> 
</UserControl.Resources> 

<Grid> 
    <Button Content="Button" 
      Name="button1" 
      Command="{Binding Source={StaticResource viewModelA}, Path=ClickCommand}" /> 
</Grid> 

感謝變化!

+0

您是否正確視圖模型執行INotifyPropertyChanged? – Ekk

回答

2

簡單的答案是在你的第二個例子中,你被綁定到兩個不同的視圖模型。

<Window.Resources> 
    <!-- View Model Instance #0 --> 
    <me:UserControl1ViewModel x:Key="viewModel" /> 
</Window.Resources> 

<UserControl.Resources> 
    <!-- View Model Instance #1 --> 
    <me:UserControl1ViewModel x:Key="viewModelA" /> 
</UserControl.Resources> 

基本上,您的UserControl和Window不共享相同的視圖模型實例,因此不會傳播更新。您需要獲得與您的用戶控件相同的實例。

如何:

<!-- Window --> 
<v:UserControl1 DataContext="{Binding Source={StaticResource viewModel}}" /> 

<!-- UserControl1 --> 
<Button Content="Button" 
     Name="button1" 
     Command="{Binding Path=ClickCommand}" /> 
相關問題