2010-01-10 8 views
5

मैं एमवीवीएम का उपयोग कर रहा हूं और प्रत्येक व्यू मैप्स को एक व्यूमोडेल में एक सम्मेलन के साथ उपयोग कर रहा हूं। आईई MyApp.Views.MainWindowView MyApp.ViewModels.MainWindowViewModelडेटा टेम्पलेट + एमवीवीएम

वहाँ DataTemplate को हटा कर उसे सी # में करने के लिए कोई तरीका है? कुछ प्रकार के लूप के साथ?

<DataTemplate DataType="{x:Type vm:MainWindowViewModel}"> 
    <vw:MainWindowView /> 
</DataTemplate> 

उत्तर

6

तो मूल रूप से, आप प्रोग्राम डेटा खाका बनाने के लिए की जरूरत है ... यही कारण है कि बहुत स्पष्ट नहीं है, लेकिन मुझे लगता है कि आप FrameworkElementFactory वर्ग के साथ है कि लक्ष्य को हासिल कर सकते हैं:

public void AddDataTemplateForView(Type viewType) 
{ 
    string viewModelTypeName = viewType.FullName + "Model"; 
    Type viewModelType = Assembly.GetExecutingAssembly().GetType(viewModelTypeName); 

    DataTemplate template = new DataTemplate 
    { 
     DataType = viewModelType, 
     VisualTree = new FrameworkElementFactory(viewType) 
    }; 

    this.Resources.Add(viewModelType, template); 
} 

मैं इसे परीक्षण नहीं किया , इसलिए कुछ समायोजन आवश्यक हो सकते हैं ... उदाहरण के लिए मुझे यकीन नहीं है कि संसाधन कुंजी का प्रकार क्या होना चाहिए, क्योंकि यह आमतौर पर XAML

6

धन्यवाद थॉमस का उपयोग करते हुए डेटाटाइप सेट करते समय यह निश्चित रूप से सेट किया जाता है। कोड मैंने यह किया है। डी

private void AddAllResources() 
    { 
     Type[] viewModelTypes = Assembly.GetAssembly(typeof(MainWindowViewModel)).GetTypes() 
      .Where(t => t.Namespace == "MyApp.ViewModels" && t.Name.EndsWith("ViewModel")).ToArray(); 

     string viewName = null; 
     string viewFullName = null; 

     foreach (var vmt in viewModelTypes) 
     { 
      viewName = vmt.Name.Replace("ViewModel", "View"); 
      viewFullName = String.Format("MyApp.Views.{0}, MyApp", viewName); 

      DataTemplate template = new DataTemplate 
      { 
       DataType = vmt, 
       VisualTree = new FrameworkElementFactory(Type.GetType(viewFullName, true)) 
      }; 

      this.Resources.Add(new DataTemplateKey(vmt), template); 
     } 
    } 
:

आप DataTemplateKey जब resoures जोड़ने उपयोग करने की आवश्यकता

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

  • कोई संबंधित समस्या नहीं^_^