2016-08-29 1 views
-1

Почему this.datacontext (Window) показывает данные из viewModel и FrameContent.datacontext (страница), нет?Почему this.datacontext (Window) показывает данные из viewModel и FrameContent.datacontext (страница), нет?

В настоящее время я загружаю данные из вида страницы в окно. Вместо того, чтобы загружать его непосредственно в dataContext окна, я хочу загрузить его в dataContext кадра, где отображаются данные.

Ниже мой код:

ViewConfiguration.xaml:

<Frame x:Name="FrameContent" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" NavigationUIVisibility="Hidden" BorderThickness="0"/> 

ViewConfiguration.xaml.cs:

namespace Modules.Configuration 
{ 
    public partial class ViewConfiguration : Window 
    { 
     public ViewConfiguration() 
     { 
      InitializeComponent(); 
      ViewModelConfiguration ViewModelConfiguration = new ViewModelConfiguration(); 

     } 

     private void PageEditor1_Click(object sender, RoutedEventArgs e) 
     { 
      this.DataContext = new ViewModelEditor1(); 
      FrameContent.Source = new Uri("/Modules/Editor1/View/ViewEditor1.xaml", UriKind.Relative); 

     } 

     private void PageEditor2_Click(object sender, RoutedEventArgs e) 
     { 
      this.DataContext = new ViewModelEditor2(); 
      FrameContent.Source = new Uri("/Modules/Editor2/View/ViewEditor2.xaml", UriKind.Relative); 
     } 
    } 
} 

Я подозревал, что что-то, как это будет работать, но не делает.

private void PageEditor1_Click(object sender, RoutedEventArgs e) 
{ 
    // this.DataContext = new ViewModelEditor1();   // loading in datacontext of window 
    this.FrameContent.DataContext = new ViewModelEditor1(); // loading in datacontext of frame 
    FrameContent.Source = new Uri("/Modules/Editor1/View/ViewEditor1.xaml", UriKind.Relative);  
} 

ответ

1

Как Adam Nathan государства в своей книге WPF Unleashed (взгляните на главу 4, «Введение элементов управления WPF в»), Frame управления используется для изолирующей его содержания от остальной части пользовательского интерфейса, так по этой причине он не наследует свойства своего родителя (включая DataContext).

Поэтому ваша строка кода

this.FrameContent.DataContext = new ViewModelEditor1(); 

является необходимой за вас работу приложения.

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