2012-04-17 21 views
15

के आधार पर मैंविभिन्न विचारों/डेटा टेम्पलेट सदस्य चर

ViewModelClass 

कहा जाता है जो एक बूलियन शामिल एक दृश्य मॉडल है।

मैं जो

ObservableCollection<ViewModelClass> m_allProjects; 

तब मैं मेरे विचार में इस राशि में शामिल है एक और दृश्य मॉडल है:

<DataTemplate> 
    <views:ProjectInfoView x:Key="ProjectInfoDetailTemplate"/> 
</DataTemplate> 

<ItemsControl Grid.Row="1" Grid.Column="0" 
       ItemsSource="{Binding AllProjects}" 
       ItemTemplate="{StaticResource ProjectInfoDetailTemplate}" 
       Margin="10,28.977,10,10"> 
</ItemsControl > 

अब मैं AllProjects-संग्रह में बूलियन के आधार पर चाहते हैं, एक का उपयोग करने के अलग डेटामैप्लेट। इसे करने का बेहतरीन तरीका क्या है?

मुझे पता है कि मैं इसे अलग-अलग ViewModels के साथ कर सकता हूं और एक प्रकार का व्यूमोडेल-बेस ऑब्जेक्ट का उपयोग कर सकता हूं, लेकिन मैं केवल 1 व्यू मॉडल का उपयोग करना पसंद करता हूं।

संपादित करें:

मैं डेटा चलाता साथ ऐसा करना चाहते हैं। क्या कोई मुझे कुछ कोड प्रदान कर सकता है?

उत्तर

58

मैं आमतौर पर डेटा प्रदर्शित करने के लिए ContentControl का उपयोग करता हूं, और ContentTemplate को बदलने वाली संपत्ति के आधार पर ट्रिगर में स्वैप करता हूं।

यहाँ एक उदाहरण मैं my blog पर पोस्ट किया है कि एक बाध्य संपत्ति

<DataTemplate x:Key="PersonTemplate" DataType="{x:Type local:ConsumerViewModel}"> 
    <TextBlock Text="I'm a Person" /> 
</DataTemplate> 

<DataTemplate x:Key="BusinessTemplate" DataType="{x:Type local:ConsumerViewModel}"> 
    <TextBlock Text="I'm a Business" /> 
</DataTemplate> 

<DataTemplate DataType="{x:Type local:ConsumerViewModel}"> 
    <ContentControl Content="{Binding }"> 
     <ContentControl.Style> 
      <Style TargetType="{x:Type ContentControl}"> 
       <Setter Property="ContentTemplate" Value="{StaticResource PersonTemplate}" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ConsumerType}" Value="Business"> 
         <Setter Property="ContentTemplate" Value="{StaticResource BusinessTemplate}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ContentControl.Style> 
    </ContentControl> 
</DataTemplate> 

एक DataTemplateSelector भी काम करेंगे के आधार पर एक टेम्पलेट स्वैप है, लेकिन केवल संपत्ति जो टेम्पलेट को दिखाने के लिए के बाद से नहीं बदलता है निर्धारित करता है कि अगर DataTemplateSelectors परिवर्तन अधिसूचनाओं का जवाब न दें। यदि संभव हो तो मैं आमतौर पर उनसे बचता हूं क्योंकि मैं अपने विचार में अपने दृश्य चयन तर्क को भी पसंद करता हूं ताकि मैं देख सकूं कि क्या हो रहा है।

-1

यदि आप ViewModelClass बूलियन के मामले में अपने आइटम नियंत्रण आइटम दृश्य को स्विच करना चाहते हैं, तो आप बस अपने ProjectInfoView usercontrol में डेटाैट्रिगर शैली का उपयोग कर सकते हैं।

+0

क्या आप उदाहरण के रूप में कुछ कोड दिखा सकते हैं? –

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