2014-11-17 4 views
0

MVVM Light을 사용하고 Locator에 두 개의 ViewModels가 있습니다. 그러나 페이지에서 나는 하나 이상의 ViewModels를 사용하여 페이지의 UI 요소에서 해당 속성을 사용하지만 어떻게 사용합니까?하나 이상의 DataContext를 사용하는 방법

public class ViewModelLocator 
{ 
    public ViewModelLocator() 
    { 
     ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

     SimpleIoc.Default.Register<StudentsViewModel>(); 
     SimpleIoc.Default.Register<SettingsViewModel>(); 
    } 

    public StudentsViewModel StudentsVM 
    { 
     get 
     { 
      return ServiceLocator.Current.GetInstance<StudentsViewModel>(); 
     } 
    } 

    public SettingsViewModel SettingsVM 
    { 
     get 
     { 
      return ServiceLocator.Current.GetInstance<SettingsViewModel>(); 
     } 
    } 

    public static void Cleanup() {} 
} 

그래서 난 분명히 같은 것을 할 수 없습니다 :

DataContext = "{Binding Source={StaticResource Locator}, Path=SettingsVM, Path=StudentsVM}"> 
여기
<Page 
x:Class="my_app.MainMenuPage" 
xmlns:i="using:Microsoft.Xaml.Interactivity" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:my_app" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" Foreground="Red" 
DataContext = "{Binding Source={StaticResource Locator}, Path=SettingsVM }"> 

내 로케이터의 코드입니다 : 여기

내 페이지의 XAML입니다

답변

0

내가 볼 수있는 한 2 DataContext을 사용하지 마십시오. 하나의 DataContext 2 개체를 사용합니다. (모든 Path없이) LocatorDataContext을 설정하고

<Page ... DataContext="{Binding Source={StaticResource Locator}}"> 
    <!-- .... --> 
    <TextBlock Text="{Binding StudentsVM.PropertyA}"/> 
    <TextBlock Text="{Binding StudentsVM.PropertyB}"/> 
    <TextBlock Text="{Binding SettingsVM.PropertyC}"/> 
    <TextBlock Text="{Binding SettingsVM.PropertyD}"/> 
    <!-- .... --> 
</Page> 

바인딩 당 Path=StudentsVM.PropertyA 또는 Path=SettingsVM.PropertyC을 지정하거나 바인딩에 더 많은 속성이있는 경우 로컬 컨트롤 그룹에 대한 DataContext을 변경할 수 있습니다

<Page ... DataContext="{Binding Source={StaticResource Locator}}"> 
    <!-- .... --> 
    <StackPanel DataContext="{Binding StudentsVM}"> 
     <TextBlock Text="{Binding PropertyA}"/> 
     <TextBlock Text="{Binding PropertyB}"/> 
    </StackPanel> 
    <!-- .... --> 
    <StackPanel DataContext="{Binding SettingsVM}"> 
     <TextBlock Text="{Binding PropertyC}"/> 
     <TextBlock Text="{Binding PropertyD}"/> 
    </StackPanel> 
    <!-- .... --> 
</Page> 
관련 문제