2010-12-09 35 views
6

J'ai un ContentControl dont le contenu est déterminé par un DataTemplateSelector basé sur la propriété Workspace. Mais quand le modèle de données est changé, je dois faire quelques calculs basés sur la taille initiale de ContentControl et de toute la fenêtre, ainsi je veux savoir quand il est chargé.Comment savoir quand le contenu de ContentControl est chargé lors de la modification

<ContentControl Content="{Binding Path=Workspace}" ContentTemplateSelector="{StaticResource workspaceTemplateSelector}" /> 

ResourceDictionary:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:vw="clr-namespace:Capgemini.Sag.KeyEm.View"> 

    <DataTemplate x:Key="keyboardTemplate" > 
     <vw:Keyboard/> 
    </DataTemplate> 

    <DataTemplate x:Key="welcomeTemplate"> 
     <vw:Welcome/> 
    </DataTemplate> 

    <vw:WorkspaceTemplateSelector    
     KeyboardTemplate="{StaticResource keyboardTemplate}"    
     WelcomeTemplate="{StaticResource welcomeTemplate}"   
     x:Key="workspaceTemplateSelector"/> 
</ResourceDictionary> 

DataTemplateSelector:

using Capgemini.Sag.KeyEm.ViewModel.Interfaces; 

namespace Capgemini.Sag.KeyEm.View 
{ 
    using System.Windows; 
    using System.Windows.Controls; 

    class WorkspaceTemplateSelector : DataTemplateSelector 
    { 
     public DataTemplate WelcomeTemplate { get; set; } 
     public DataTemplate KeyboardTemplate { get; set; } 

     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      if (item is IWelcomeViewModel) 
       return WelcomeTemplate; 
      if (item is IKeyboardViewModel) 
       return KeyboardTemplate; 
      return null; 
     } 
    } 
} 
+0

La bonne façon de gérer cela est de répondre à votre propre question, puis, quelques jours plus tard, sélectionnez la bonne réponse. – Will

Répondre

0

Une chose que vous pouvez faire est envelopper le contenu de votre DataTemplate dans un conteneur et écouter l'événement chargé

<DataTemplate x:Key="keyboardTemplate"> 
     <Grid Loaded="Grid_Loaded"> 
      <vw:Welcome/> 
     </Grid> 
    </DataTemplate> 

l'événement chargé sera levé lorsque les modèles sont changés. Espérons que cela aidera.

+0

Grid_Loaded doit être dans le code-behind pour ResourceDictionary. Mais les calculs sont dans la fenêtre qui utilisent le ResourceDictionary. Comment puis-je résoudre cela? – magol

+0

vérifier si cela aide http://stackoverflow.com/questions/92100/is-it-possible-to-set-code-behind-a-resource-dictionary-in-wpf-for-event-handling – biju

+0

Je maintenant comment ajouter un code-behind au ResourceDictionary. Mais comment communiquer la largeur de la fenêtre parent? – magol