2014-07-03 57 views
0

有人可以告訴我爲什麼我不能再次更改頁面嗎?導航mvvm燈

例如,當我單擊登錄時,應用程序可以更改頁面,即顯示主面板,但是如果用戶單擊另一個按鈕打開另一個面板,則不會發生任何事情。

主窗口

<Window x:Class="Smart.Interface.View.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:view="clr-namespace:Smart.Interface.View" 
     xmlns:ViewModel="clr-namespace:Smart.Interface.ViewModel" 
     Title="MainWindow" Height="768" Width="1024" 
     DataContext="{Binding Login, 
           Source={StaticResource Locator}}" 
     ResizeMode="NoResize"> 


    <Grid Background="#FFE6E7E8"> 
     <Rectangle Panel.ZIndex="0" Name="RetanguloTop" Fill="Black" HorizontalAlignment="Left" Height="35" Stroke="Black" VerticalAlignment="Top" Width="1024"/> 
     <Rectangle Name="RetanguloFooter" Fill="Black" HorizontalAlignment="Left" Height="35" Margin="0,703,0,0" Stroke="Black" VerticalAlignment="Top" Width="1024"/> 

     <ContentControl Content="{Binding CurrentViewModel}" /> 
    </Grid> 
</Window> 

第一個動作完美的作品 - >CurrentViewModel = new PainelDeOpcoesViewModel();

但在視圖PainelDeOpcoesView我不再能夠訪問任何其他視圖,utlizando同樣的想法。

CurrentViewModel = new GerenciarUsuariosViewModel(); < - 它不工作

private ViewModelBase _currentViewModel; 
     public ViewModelBase CurrentViewModel 
     { 
      get 
      { 
       return _currentViewModel; 
      } 
      set 
      { 
       if (_currentViewModel == value) 
        return; 
       _currentViewModel = value; 
       RaisePropertyChanged("CurrentViewModel"); 
      } 
     } 

我的App.xaml

<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 

      <DataTemplate DataType="{x:Type vm:LoginViewModel}"> 
       <views:LoginView /> 
      </DataTemplate> 

      <DataTemplate DataType="{x:Type vm:PainelDeOpcoesViewModel}"> 
       <views:PainelDeOpcoesView /> 
      </DataTemplate> 

      <DataTemplate DataType="{x:Type vm:GerenciarUsuariosViewModel}"> 
       <views:GerenciarUsuariosView /> 
      </DataTemplate> 
+0

補充一點: CONTENT =「{結合CurrentViewModel,模式=雙向,UpdateSourceTrigger =的PropertyChanged, NotifyOnSourceUpdated = True}「... –

+0

感謝您的幫助,但它沒有奏效! –

回答

0

一些位丟失,但猜測是CurrentViewModel需要籌集的PropertyChanged通知(執行INotifyPropertyChanged ):

public object CurrentViewModel { 
    get { return _currentViewModel; } 
    set { 
     _currentViewModel = value; 
     OnPropertyChanged("CurrentViewModel"); //Ensure you have this or are binding to a DependencyProperty 
    } 
} 

如果這不能解決它,請提供您的財產的代碼。

+0

感謝您的想法,但在我的代碼已經存在! –

+0

和你正在綁定的Locator.Login一樣,你是在哪裏分配CurrentViewModel? –

+0

就是這樣!正如我前面所說,第一個動作起作用,但是當主屏幕被加載時,我不再使用和享受加載另一個頁面的相同邏輯。 –

0

您可以通過創建一個數據模板得到想要的結果,其中視圖模型充當重點查看作爲其各自的價值。 就在上面的DataTemplate添加到您的XAML

<Window.Resources> 
<DataTemplate DataType="{x:Type DataTemplates:PainelDeOpcoesViewModel}"> 
    <DataTemplates:PainelDeOpcoesView></DataTemplates:PainelDeOpcoesView> 
</DataTemplate> 
<DataTemplate DataType="{x:Type DataTemplates:GerenciarUsuariosViewModel}"> 
    <DataTemplates:GerenciarUsuariosView></DataTemplates:GerenciarUsuariosView> 
</DataTemplate> 

在按鈕單擊

CurrentViewModel = new PainelDeOpcoesViewModel(); 

        OR 

CurrentViewModel = new GerenciarUsuariosViewModel(); 
+0

我已經在我的App.xaml中執行此操作,但無法正常工作。 –