2015-04-02 4 views
0

У меня есть приложение WPF, которое выглядит так: enter image description here Когда пользователь нажимает на левую сторону (панель навигации), например кнопку сервера, то он должен отображаться на сервере usercontrol. Он должен отображать разные экраны с правой стороны, зависит от кнопки, которую пользователь нажал. Основной код XAML файл:Команда не показывает правильный пользовательский контроль

<igWpf:XamRibbonWindow x:Class="BackupCustomizing.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:ignore="http://www.ignore.com" 
     xmlns:ig="http://schemas.infragistics.com/xaml" 
     xmlns:views="clr-namespace:BackupCustomizing.Views" 
     xmlns:viewmodel="clr-namespace:BackupCustomizing.ViewModel"    
     xmlns:igWpf="http://schemas.infragistics.com/xaml/wpf" 
     mc:Ignorable="d ignore" 
     Height="400" 
     Width="700" 
     Title="Backup customizing V0.1" 
     DataContext="{Binding Main, Source={StaticResource Locator}}" ResizeMode="NoResize"> 

    <igWpf:XamRibbonWindow.Resources> 
     <DataTemplate DataType="{x:Type viewmodel:ServerViewModel}"> 
      <views:ServerView/> 
     </DataTemplate> 
    </igWpf:XamRibbonWindow.Resources> 

    <ig:ThemeManager.Theme> 
     <ig:Office2013Theme /> 
    </ig:ThemeManager.Theme> 
    <igWpf:RibbonWindowContentHost x:Name="_content" 
            Theme="Office2013" 
            igWpf:RibbonWindowContentHost.ApplicationAccentColor="#0072C6"> 
     <Grid x:Name="LayoutRoot"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="200"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <views:NavigationView Grid.Column="0"/> 
      <ContentPresenter Content="{Binding CurrentViewModel}" Grid.Column="1"/> 
     </Grid> 

    </igWpf:RibbonWindowContentHost> 
</igWpf:XamRibbonWindow> 

Как вы можете видеть выше, у меня есть DataTemplate, которые ссылаются на тип данных ServerViewModel

<igWpf:XamRibbonWindow.Resources> 
     <DataTemplate DataType="{x:Type viewmodel:ServerViewModel}"> 
      <views:ServerView/> 
     </DataTemplate> 
</igWpf:XamRibbonWindow.Resources> 

An содержание ведущий, который должен показать текущий UserControl на правой стороне , зависит от того, какая кнопка была нажата.

<ContentPresenter Content="{Binding CurrentViewModel}" Grid.Column="1"/> 

И код позади:

using System.Diagnostics; 
using BackupCustomizing.Model; 
using GalaSoft.MvvmLight; 
using GalaSoft.MvvmLight.Command; 

namespace BackupCustomizing.ViewModel 
{ 
    /// <summary> 
    ///  This class contains properties that the main View can data bind to. 
    ///  <para> 
    ///   See http://www.galasoft.ch/mvvm 
    ///  </para> 
    /// </summary> 
    public class MainViewModel : ViewModelBase 
    { 
     private readonly IDataService _dataService; 
     private ViewModelBase _currentViewModel; 
     private ServerViewModel _serverViewModel; 

     /// <summary> 
     /// Views change commands. 
     /// </summary> 
     public RelayCommand ServerCmd { get; set; } 


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

     /// <summary> 
     ///  Initializes a new instance of the MainViewModel class. 
     /// </summary> 
     public MainViewModel(IDataService dataService) 
     { 
      _dataService = dataService; 
      _dataService.GetData(
       (item, error) => { }); 

      _serverViewModel = new ServerViewModel(); 
      //_currentViewModel = _serverViewModel; 

      ServerCmd = new RelayCommand(_SetServerView); 
     } 



     public void _SetServerView() 
     { 
      _currentViewModel = new ServerViewModel(); 
     } 
    } 
} 

Я связала RelayCommand serverCmd к функции:

ServerCmd = new RelayCommand(_SetServerView); 

, который должен отображать UserControl с сервера, то установите CurrentView в ServerView.

public void _SetServerView() 
     { 
      _currentViewModel = new ServerViewModel(); 
     } 

Команда Кнопка сервера связана следующим образом:

<Button Grid.Row="0" Content="Server" Margin="10 10 5 0" Command="{Binding ServerCmd}"/> 

Проблема, когда я нажал на кнопку server, он не отображает UserControl сервера почему?
Если я экземпляр CurrentView с ServerView в конструктор ViewModel как:

public MainViewModel(IDataService dataService) 
     { 
      _dataService = dataService; 
      _dataService.GetData(
       (item, error) => { }); 

      _serverViewModel = new ServerViewModel(); 
      _currentViewModel = _serverViewModel; 

      ServerCmd = new RelayCommand(_SetServerView); 
     } 

Затем он показывает мне UserControl сервера: enter image description here

+0

и, как для проблемы изменений Ьги 'ContentPresenter'' ContentControl' в вашем XAML. – Bolu

+0

@Bolu есть навигационная система на левой стороне. –

+0

Я изменил 'ContentPresenter' на' ContentControl', и он не работает. –

ответ

0

Пятно проблемы, в вашей команде ServerCmd вы должны установить свойство не поле для того, чтобы RaisePropertyChange, поэтому изменить ваш _SetServerView() на:

public void _SetServerView() 
{ 
    CurrentViewModel = new ServerViewModel(); 
} 
+0

@zero_coding, любая обратная связь? – Bolu

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