Datacontext के App.xaml (MVVMLight के साथ) में कॉन्फ़िगर किया गया है, लेकिन जब एक ViewModel एक दृश्य है।
<DataTemplate DataType="{x:Type vm:VMUserControl}">
<views:UCViewSnow />
</DataTemplate>
मुझे मल्टीप्ले व्यू के साथ एक ही ViewModel का उपयोग करने की आवश्यकता है, मैंने प्रत्येक दृश्य (.xaml.cs) के लिए कोडबाइंड में DataContext जोड़ा, लेकिन काम नहीं कर रहा।
DataContext = ViewModel.ViewModelLocator.GetStaticVMuserControl;
मैं app.config से मापदंडों के अनुसार DataContext जोड़ने की जरूरत है। मैं वीएस 2015 में न्यूगेट से एमवीवीएम प्रकाश के साथ 4.5.1 फ्रेमवर्क के साथ डब्ल्यूपीएफ का उपयोग करता हूं
<DataTemplate DataType="{x:Type vm:VMUserControl}">
<views:UCViewDark />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:VMUserControl}">
<views:UCViewSnow/>
</DataTemplate>
उत्तर:
जवाब के लिए 0 № 1मुझे कुछ संभावित कारण दिखाई देते हैं कि डेटाटेम्पलेट "काम क्यों नहीं कर सकता है।"
1 - शायद आपने अपने DataContext (vm: VMUserColrol) के साथ अपने विचार की सामग्री को "t bind" नहीं किया था।
2 - आप कंटेंट कंट्रोलर के बिना कंटेंट कंट्रोल के कस्टम टेम्प्लेट का उपयोग करते हैं।
उदाहरण के लिए: App.xaml
...
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" />
</Application.Resources>
...
आपके दृश्य में
अद्यतन करें: मामले में यदि आप एक डेटाटेप के लिए दो डेटाटेम्पलेट को परिभाषित करते हैं (दृश्यमॉडल) आपको अतिरिक्त लागू करना चाहिए और स्वयं ContentTemplateSelector का उपयोग करना चाहिए।
<View ...
DataSource={Binding Source={StaticResource Locator}, Path=YourViewModel}>
<View.Resource>
<ResourceDictionar>
<DataTemplate DataType="{x:Type vm:VMUserControl}"
x:Key="darkDataTemplate">
<views:UCViewDark />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:VMUserControl}"
x:Key="snowDataTemplate">
<views:UCViewSnow/>
</DataTemplate>
<local:CustomContentTemplateSelector x:Key="yourContentTemplateSelector"
FirstDataTemplate={StaticResource snowDataTemplate}
SecondDataTemplate={StaticResource darkDataTemplate} />
</ResourceDictionar>
</View.Resource>
<ContentControl Content={Binding}
ContentTemplateSelector={StaticResource yourContentTemplateSelector}/>
CustomContentTemplateSelector.cs
public class CustomContentTemplateSelector:DataTemplateSelector
{
public DataTemplate FirstDataTemplate {get; set;}
public DataTemplate SecondDataTemplate {get; set;}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container){
// here you should impelement logic for choose data template
// if (condition)
// return FirstDataTemplate
// else
// return SecondDataTemplate
}
}