2016-02-03 133 views
1

我想在我的WPF應用程序中實現我的導航。目前,StartScreen.xaml在啓動時顯示,但是當我點擊按鈕時,DeviceManagement.xaml未顯示。甚至沒有調用ShowDeviceManagement命令。命令綁定在WPF應用程序中未正確執行

這讓我假設命令按鈕是不正確的?我該如何解決它?

的App.xaml

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:DeviceManagementViewModel}"> 
     <view:DeviceManagement /> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type vm:MainWindowViewModel}"> 
     <view:StartScreen /> 
    </DataTemplate> 
</Application.Resources> 

MainWindow.xaml

<Window ...> 
    <Window.DataContext> 
     <vm:MainWindowViewModel/> 
    </Window.DataContext> 
    <ContentControl 
     Content="{Binding ViewModel}"> 
    </ContentControl> 
</Window> 

StartScreen.xaml

<UserControl ...> 
    <Button 
     Content="Click Me" 
     Command="{Binding DataContext.ShowDeviceManagement, RelativeSource={RelativeSource AncestorType={x:Type vm:MainWindowViewModel}}, Mode=OneWay}"/> 
</UserControl> 

MainWindoViewModel.cs

class MainWindowViewModel : ViewModelBase 
{ 
    public ViewModelBase ViewModel { get; set; } 

    public MainWindowViewModel() 
    { 
     ViewModel = this; 
    } 

    public ICommand ShowDeviceManagement 
    { 
     get 
     { 
      return new RelayCommand(action => ViewModel = new DeviceManagementViewModel()); 
     } 
    } 
} 

回答

1

「DataContext」在您的命令綁定中已過時。 RelativeSource用於在可視化樹中查找祖先,而您的MainWindowViewModel不是Visual。應該是這樣的:

Command="{Binding ShowDeviceManagement, Mode=OneWay}" 
+0

嘗試初始化您RelayCommand並將其設置爲私有字段在構造函數和ShowDeviceManagement財產剛剛返回,而不是每個屬性訪問時間創建命令實例這一領域。 –