2012-09-19 4 views
5

मैं एक नई परियोजना शुरू कर रहा हूं और this question में अनुशंसित संरचना पर अपनी परियोजना संरचना को उन्मुख कर रहा हूं।देखें विभिन्न विधानसभा में व्यूमोडेल नहीं मिला

अब मैं अजीब व्यवहार देख रहा हूं। जब मैं व्यू-एक्सएएमएल में डेटाैकेंटेक्स्ट सेट कर रहा हूं, तो यह रनटाइम पर नहीं मिलता है (XamlParseException प्राप्त करना)। जब मैं इसे codebehind-file में कन्स्ट्रक्टर में सेट करता हूं, तो सब कुछ ठीक काम कर रहा है।

क्या यह अलग-अलग असेंबली का उपयोग करते समय यह आधिकारिक (दस्तावेज) व्यवहार है, या क्या मैं कुछ गलत कर रहा हूं?

कोड:

काम नहीं कर रहा:

MainView.xaml:

<UserControl x:Class="ViewsRoot.Views.MainView"    
     xmlns:baseControls="clr-namespace:BaseControls;assembly=BaseControls"    
     xmlns:viewModels="clr-namespace:ViewModelsRoot;assembly=ViewModelsRoot"> 
<UserControl.DataContext> 
    <viewModels:ShellViewModel /> 
</UserControl.DataContext> 

MainView.xaml.cs

public MainView() 
{ 
    InitializeComponent(); 
    // No DataContext set in codebehind-file  
} 

कार्य:

MainView.xaml:

<UserControl x:Class="ViewsRoot.Views.MainView"    
     xmlns:baseControls="clr-namespace:BaseControls;assembly=BaseControls"    
     xmlns:viewModels="clr-namespace:ViewModelsRoot;assembly=ViewModelsRoot"> 
<!--<UserControl.DataContext> 
    <viewModels:ShellViewModel /> 
</UserControl.DataContext> --> 

MainView.xaml.cs:

public MainView() 
{ 
    InitializeComponent(); 
    DataContext = new ViewModelsRoot.ShellViewModel(); 
} 

अद्यतन:

अपवाद-पाठ है:

{ " फ़ाइल या असेंबली \ "ViewModelsRoot, PublicKeyToken = null \" या इसकी निर्भरताओं में से कोई नहीं मिला था। हेवन

टिप्पणी के लिए धन्यवाद, लेकिन मैं: सिस्टम निर्दिष्ट फ़ाइल नहीं मिल सकता है "}

और केवल आंतरिक अपवाद मैं देख सकता हूँ एक System.IO.FileNotFoundException है

अद्यतन 2।। नामस्थान भूल नहीं गया। मैंने इसे कोड दिखाने के लिए यहां छोटा कर दिया, लेकिन मैं डबल- और ट्रिपल चेक (फिर से)। डेटाकॉन्टेक्स नामस्थान भी इंटेलिजेंस द्वारा भरा जाता है। पूरे <viewModels:ShellViewModel /> इंटेलि-अर्थ द्वारा लिखा गया है। तो यह पाया जाता है डिजाइनटाइम ... ... तो कोई और विचार?

अद्यतन 3: एक्सएएमएल "सही ढंग से" पार्स किया गया है क्योंकि मैं डेटा कॉन्टेक्स्ट को उसी असेंबली में कक्षा में बांधने में सक्षम हूं।

+0

क्या कोई आंतरिक अपवाद है? – Guillaume

+0

@Guillaume कृपया मेरा अपडेट किया गया प्रश्न देखें :) – basti

+0

आप अपने 'UserControl' में कुछ नामस्थान भूल गए हैं। जांचें कि क्या यह मदद करता है: http://stackoverflow.com/questions/8852912/xamlparseexception-in-view – Guillaume

उत्तर

-1

मुझे अक्सर यह त्रुटि मिली है जब परियोजना लक्ष्य ढांचे को "क्लाइंट प्रोफाइल" पर सेट किया गया था (यह डिफ़ॉल्ट रूप से वीएस -2010, आईआईआरसी पर सेट किया गया था), यदि ऐसा है, तो इसे 3.5 या 4.0 में बदलने का प्रयास करें।

+0

क्षमा करें। कोई भाग्य नहीं - यह .net4-पूर्ण प्रोफाइल है। – basti

+0

कोई भी मौका आप अपनी परियोजना को अपलोड कर सकते हैं ताकि मैं एक नज़र देख सकूं? –

2

मैं उन दोनों के बीच निर्दिष्ट निर्भरता के साथ एक पेड़ परियोजना समाधान का उपयोग कर इस त्रुटि, पुन: उत्पादित है

  • StartupProject → ViewsRoot
  • ViewsRoot → ViewModelsRoot
  • ViewModelsRoot

"StartupProject" आउटपुट प्रकार "exe" है, जबकि अन्य दो में "डीएल" है।

मेरे मामले में, मैंने "स्टार्टअपप्रोजेक्ट" की संदर्भ सूची में "ViewModelsRoot" जोड़कर समस्या हल की। यह एक कोडिंग समस्या नहीं है, बल्कि एक रनटाइम समस्या है, क्योंकि "ViewModelsRoot.dll" को "स्टार्टअपप्रोजेक्ट" आउटपुट फ़ोल्डर में कॉपी नहीं किया गया है।

जब आप कोड-पीछे में डेटाकॉन्टेक्स्ट निर्दिष्ट करते हैं, तो विजुअल स्टूडियो उस "डीएलएल" की आवश्यकता को नोटिस करता है और इसे संकलन के बाद आउटपुट में जोड़ता है। यह XAML से DataContext सेट करते समय नहीं होता है। यह मुश्किल है क्योंकि "ViewModelsRoot" असेंबली को अप्रत्यक्ष रूप से रनटाइम पर "ViewsRoot" के माध्यम से हल किया जाता है। इसे संदर्भ सूची में जोड़ना विजुअल स्टूडियो को दोनों मामलों में "डीएलएल" की प्रतिलिपि बनाने के लिए मजबूर करता है।

आप सीधे आउटपुट फ़ोल्डर में "ViewModelsRoot.dll" की प्रतिलिपि बना सकते हैं, लेकिन जब आप कोड बदलते हैं तो यह अपडेट नहीं किया जाएगा।

+0

यह दिलचस्प है। मेरे पास एक ही समस्या थी और इसे इस फिक्स के साथ हल किया लेकिन मेरे लिए यह एक गंदा फिक्स है। मैं अपने स्टार्टअप प्रोजेक्ट में यह संदर्भ नहीं लेना चाहता हूं और मैं चाहता हूं कि मेरी परियोजनाएं स्वतंत्र हों। मैंने देखा कि यह अतीत में मेरे साथ कभी नहीं हुआ था लेकिन अतीत में मुझे हमेशा एक व्यूमोडेल के लिए कुछ कोडिंग संदर्भ था। तो ... एक कम स्पष्ट हैक सिर्फ अपने दृश्य प्रोजेक्ट में एक निजी कक्षा को जोड़ना है और जो कुछ भी आप चाहते हैं उसे कॉल करें और व्यूमोडेल प्रोजेक्ट में व्यूमोडेल में केवल एक फ़ील्ड जोड़ें। संदर्भ के लिए बस इसे तत्काल भी नहीं किया जाना चाहिए। –

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