यही कारण है?
MainWindow.xaml:
<Window x:Class="MVVMProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ContentControl Content="{Binding}"/>
</Grid>
</Window>
अपने ExampleView.xaml को इस प्रकार सेट करें:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vms="clr-namespace:MVVMProject.ViewModels">
<DataTemplate DataType="{x:Type vms:ExampleVM}" >
<Grid>
<ActualContent/>
</Grid>
</DataTemplate>
</ResourceDictionary>
और इस तरह विंडो बनाएं:
public partial class App : Application {
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
MainWindow app = new MainWindow();
ExampleVM context = new ExampleVM();
app.DataContext = context;
app.Show();
}
}
जब इस तरह से किया जा सकता है?
App.xaml: (स्टार्टअप विंडो सेट करें / देखें)
<Application x:Class="MVVMProject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="ExampleView.xaml">
</Application>
ExampleView.xaml: (एक विंडो जो संसाधनविहीन नहीं है)
<Window x:Class="MVVMProject.ExampleView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vms="clr-namespace:MVVMProject.ViewModels">
>
<Window.DataContext>
<vms:ExampleVM />
</Window.DataContext>
<Grid>
<ActualContent/>
</Grid>
</Window>
अनिवार्य रूप से यह "डेटाटेम्पलेट के रूप में देखें" (वीडी) बनाम "विंडो के रूप में देखें" (VaW)
यहाँ मेरी तुलना की समझ है:
- वीडी: आपको विंडो बंद किए बिना दृश्य स्विच करने देता है। (यह मेरी परियोजना के लिए वांछनीय नहीं है)
- वीडी: वीएम व्यू के बारे में पूरी तरह से कुछ भी नहीं जानता है, जबकि वीडब्ल्यू में इसे (केवल) दूसरी विंडो खोलने पर इसे तुरंत सक्षम करने में सक्षम होना पड़ता है
- VaW: मैं वास्तव में डिजाइनर में प्रस्तुत मेरे xaml देख सकते हैं (मैं VaD के साथ नहीं कर सकते, कम से कम मेरे वर्तमान सेटअप में)
- वाह: खुलने और बंद होने वाली खिड़कियों के साथ सहजता से काम करता है; प्रत्येक विंडो में एक संगत दृश्य (और ViewModel) है
- VaD: ViewModel प्रारंभिक विंडो की चौड़ाई, ऊंचाई, रेजिजेबिलिटी आदि गुणों के माध्यम से पारित कर सकता है (जबकि वाह में वे सीधे विंडो में सेट होते हैं)
- VaW: FocusManager.FocusedElement सेट कर सकते हैं (यकीन है कि कैसे VaD में नहीं)
- वाह: कम फाइलें, चूंकि मेरी विंडो प्रकार (जैसे रिबन, डायलॉग) उनके दृश्य में शामिल हैं
तो यहां क्या हो रहा है? क्या मैं अभी XAML में अपनी खिड़कियां नहीं बना सकता, वीएम के गुणों के माध्यम से उनके डेटा को सफाई से एक्सेस कर सकता हूं और इसके साथ किया जा सकता है? कोड-पीछे एक ही (लगभग शून्य) है।
मैं यह समझने के लिए संघर्ष कर रहा हूं कि क्यों मुझे एक संसाधन केंद्र में सभी दृश्य सामग्री को फेरबदल करना चाहिए।