/ WPF में MVVMLight के साथ एक दृश्यमॉडल दो दृश्य - c #, wpf, xaml, विज़ुअल-स्टूडियो -2015, एमवीएम-लाइट

WPV में एमवीवीएमएल के साथ एक व्यू मॉडेल दो दृश्य - सी #, डब्ल्यूपीएफ, एक्सएएमएल, विजुअल स्टूडियो -2015, एमवीवीएम-लाइट

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
}
}