2016-02-03 3 views
1

Я хочу реализовать свою навигацию в своем приложении WPF. В настоящее время StartScreen.xaml отображается при запуске, но когда я нажимаю кнопку, DeviceManagement.xaml не отображается. Вызывается даже команда ShowDeviceManagement.Command-Binding неправильно выполняется в приложении 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 не является визуальным. Должно быть так:

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

Попытка инициализировать RelayCommand и установить его в частной области в конструкторе и в ShowDeviceManagement собственности просто вернуть это поле, вместо создания экземпляра команды каждый раз, когда свойство доступ. –

Смежные вопросы