2010-12-09 27 views
6

बदलते समय ContentControl की सामग्री लोड हो जाती है मेरे पास एक ContentControl है जिसका सामग्री किसी डेटा टेम्पलेट चयनकर्ता द्वारा प्रॉपर्टी वर्कस्पेस पर आधारित है। लेकिन जब डेटा टेम्पलेट बदल जाता है, तो मुझे कंटेंट कंट्रोल और पूरी विंडो के प्रारंभिक आकार के आधार पर कुछ गणना करनी चाहिए, इसलिए मैं जानना चाहता हूं कि यह कब लोड किया जाता है।मुझे कैसे पता चलेगा कि

<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

इसे संभालने का सही तरीका अपने स्वयं के प्रश्न का उत्तर देना है और फिर, कुछ दिनों बाद, इसे सही उत्तर के रूप में चुनें। – Will

उत्तर

0

एक बात आप कर सकते हैं एक कंटेनर के अंदर अपने DataTemplate सामग्री लपेट कर भरी हुई घटना

<DataTemplate x:Key="keyboardTemplate"> 
     <Grid Loaded="Grid_Loaded"> 
      <vw:Welcome/> 
     </Grid> 
    </DataTemplate> 
को सुनने है

लोड किए गए ईवेंट को तब उठाया जाएगा जब टेम्पलेट्स स्विच किए जाएंगे। उम्मीद है कि इससे मदद मिलेगी।

+0

Grid_Loaded को संसाधन डॉट के लिए कोड-बैक में होना चाहिए। लेकिन गणना विंडो में हैं जो संसाधन डिक्शनरी का उपयोग करती है। मैं इसे कैसे हल करूं? – magol

+0

जांचें कि क्या यह मदद करता है http://stackoverflow.com/questions/92100/is-it-possible-to-set-code-behind-a-resource-dictionary-in-wpf-for-event-handling – biju

+0

अब मैं कैसे संसाधन डिक्शनरी में कोड-बैक जोड़ने के लिए। लेकिन मैं पैरेंट विंडो की चौड़ाई कैसे संवाद करूं? – magol

संबंधित मुद्दे