2010-04-19 6 views
0

Je rencontre un problème étrange lors de l'implémentation d'une vue maître/enfant et de propriétés de dépendance personnalisées.MVVM Light - propriétés des vues maître et enfant et des dépendances

Dans mon MASTERVIEW je liant le modèle de vue déclarative dans le XAML comme suit:

DataContext="{Binding MainViewModelProperty, Source={StaticResource Locator}}" 

et mon MainViewModel expose une collection observable que je suis liaison à un ItemsControl comme suit:

 <ItemsControl ItemsSource="{Binding Lists}" Height="490" Canvas.Top="10" Width="70"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Canvas> 
        <local:TaskListControl Canvas.Left="{Binding ListLeft}" 
              Canvas.Top="{Binding ListTop}" 
              Width="{Binding ListWidth}" 
              Height="{Binding ListHeight}" 
              ListDetails="{Binding}"/> 
        </Canvas>  
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl>  

TaskListControl à son tour déclare et lie à son ViewModel et j'ai également défini une propriété de dépendance pour la propriété ListDetails.

La propriété ListDetails n'est pas définie et si je supprime la référence déclarative à son viewmodel, le rappel de la propriété de dépendance est déclenché.

Existe-t-il un conflit avec la liaison déclarative à viewmodels et aux propriétés de dépendance definig? J'aime vraiment la miscibilité de MVVM Light et je veux persévérer avec ce problème afin que toute aide soit appréciée.

Si vous souhaitez recevoir la source de mon projet alors s'il vous plaît demander

+0

Quel est exactement votre problème? Vous parlez beaucoup de plusieurs propriétés, mais au moins je ne comprends pas l'intention de toutes ces propriétés, et nous ne voyons pas beaucoup de code, ni ne nommez un problème concret. Peut-être que vous faites, mais je ne l'ai pas vu. Votre question * "Existe-t-il un conflit avec la liaison déclarative aux viewmodels et aux propriétés de dépendance definig?" * Est également assez général ... – gehho

Répondre

0

Je ne suis pas sûr que je comprends tout à fait votre problème, mais nous allons essayer de guess.When vous parlez de « lier déclarative à viewmodel », Voulez-vous réellement dire "impérativement", comme dans "dans le code" au lieu de "dans le XAML"? Si tel est le cas, vous devez comprendre que cela surcharge l'héritage DataContext du parent, et que la propriété ListDetails fait maintenant référence au DataContext TaskListControl, et non au DataContext de DataTemplate.

Cela est facile à changer cependant, par exemple avec:

<ItemsControl ItemsSource="{Binding Lists}" 
       Height="490" 
       Canvas.Top="10" 
       Width="70"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Canvas x:Name="RootPanel"> 
       <local:TaskListControl Canvas.Left="{Binding ListLeft}" 
             Canvas.Top="{Binding ListTop}" 
             Width="{Binding ListWidth}" 
             Height="{Binding ListHeight}" 
             ListDetails="{Binding ElementName=RootPanel, 
              Path=DataContext}"/> 
      </Canvas>  
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Est-ce que ça marche? Laurent

Questions connexes