का उपयोग करके विचारों के माध्यम से नेविगेट करें मैं एमवीवीएम पैटर्न का उपयोग कर अपना पहला WPF बना रहा हूं। इस समुदाय की मदद से, मैं अपना मॉडल, मेरा पहला व्यू मॉडेल बनाने और देखने का प्रबंधन करता हूं। अब मैं मूल एप्लिकेशन लेआउट इंटरफेस को डिजाइन करने वाले ऐप में कुछ जटिलता जोड़ना चाहता हूं।डब्ल्यूपीएफ एमवीवीएम पैटर्न
- Main.XAML
- Products.XAML
- Clients.XAML
मुख्य एक मेनू और एक अंतरिक्ष बच्चे दृश्य (उत्पाद और ग्राहक) को लोड करना होगा: मेरा विचार कम से कम 2 बच्चे विचारों और एक मुख्य दृश्य है और कई XAML पर उन्हें अलग करने के लिए है। अब एमवीवीएम पैटर्न के बाद विचारों के बीच सभी नेविगेशन तर्क को व्यूमोडेल पर लिखा जाना चाहिए।
- MainViewModel
- ProductsViewModel
- ClientsViewModel
- NavigationViewModel
तो NavigationViewModel बच्चे ViewModels का एक संग्रह को शामिल करना चाहिए: तो मील विचार 4 ViewModels है? और एक सक्रिय व्यूमॉडल सही है?
तो मेरी प्रश्न हैं:
1) मैं अलग-अलग दृश्यों (उत्पाद, ग्राहक) MVVM पद्धति का उपयोग कर मुख्य दृश्य पर लोड कर सकते हैं कैसे?
2) मैं नेविगेशन व्यू मॉडल को कैसे कार्यान्वित करूं?
3) मैं खुले या सक्रिय विचारों की अधिकतम संख्या को कैसे नियंत्रित कर सकता हूं?
4) मैं खुले विचारों के बीच कैसे स्विच कर सकता हूं?
मैं बहुत सारी खोज और पढ़ रहा हूं और WPF के साथ एमवीवीएम नेविगेशन का कोई आसान कामकाजी उदाहरण नहीं मिला जो मुख्य दृश्य के अंदर कई दृश्य लोड करता है। तब से कई:
1) बाहरी टूलकिट का उपयोग करें, जिसे मैं अभी उपयोग नहीं करना चाहता हूं।
2) एक ही एक्सएएमएल फ़ाइल में सभी विचारों को बनाने के लिए सभी कोड डालें, जो एक अच्छा विचार नहीं लगता है क्योंकि मुझे 80 विचारों को लागू करने की आवश्यकता है!
मैं यहां सही रास्ते में हूं? किसी भी मदद, विशेष रूप से कुछ कोड के साथ सराहना की जाएगी।
अद्यतन
तो, मैं एक परीक्षण परियोजना @LordTakkera सलाह निम्नलिखित बनाते हैं लेकिन अटक जाते हैं।
मैं बनाने के लिए::
Two Models (Clients and Products)
One MainWindow and two wpf user controls(Clients and Products) XAML.
Three ViewModels (Clients, Products and Main ViewModel)
तब मैं इसी ViewModel करने के लिए प्रत्येक दृश्य पर DataContext सेट यह कैसे मेरे समाधान लग रहा है की तरह है। इसके बाद मैं इस तरह सामग्री प्रदाता के साथ मेनविंडो बना देता हूं और इसे व्यूमोडेल की संपत्ति से जोड़ता हूं।
MainWindow.XAML
<Window x:Class="PruevaMVVMNavNew.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="519" Width="890">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Border Grid.Column="0" Grid.ColumnSpan="2" Background="AntiqueWhite" ></Border>
<Border Grid.Row="1" Grid.RowSpan="2" Background="AliceBlue"></Border>
<Border Grid.Row="1" Grid.Column="1" Background="CadetBlue"></Border>
<ContentPresenter Grid.Row="1" Grid.Column="1" x:Name="ContentArea" Content="{Binding CurrentView}"/>
<StackPanel Margin="5" Grid.Column="0" Grid.Row="1">
<Button>Clients</Button>
<Button>Products</Button>
</StackPanel>
</Grid>
और यह भी इस MainWindow से viewmodel है:
class Main_ViewModel : BaseViewModel
{
public Main_ViewModel()
{
CurrentView = new Clients();
}
private UserControl _currentView;
public UserControl CurrentView
{
get
{
return _currentView;
}
set
{
if (value != _currentView)
{
_currentView = value;
OnPropertyChanged("CurrentView");
}
}
}
}
तो डिफ़ॉल्ट ग्राहकों द्वारा इस भार को देखने और इस तरह दिखता है (जो सिर्फ है सही!):
तो मैं मैं कोई तरीका होना चाहिए बटन मुख्य ViewModel की CurrentView संपत्ति के साथ एक निश्चित viemodel साथ, बाईं तरफ संबंधित और उसके बाद के लिए बाध्य करने के लिए उन्हें लगता है। मैं उसे कैसे कर सकता हूँ?
UPDATE2
@LordTakkera सलाह मैं अपने मुख्य ViewModel इस तरह से संशोधित के अनुसार:
class Main_ViewModel : BaseViewModel
{
public ICommand SwitchViewsCommand { get; private set; }
public Main_ViewModel()
{
//CurrentView = new Clients();
SwitchViewsCommand = new RelayCommand((parameter) => CurrentView = (UserControl)Activator.CreateInstance(parameter as Type));
}
private UserControl _currentView;
public UserControl CurrentView
{
get
{
return _currentView;
}
set
{
if (value != _currentView)
{
_currentView = value;
OnPropertyChanged("CurrentView");
}
}
}
}
मैं DelegateCommand के बजाय RelayCommand का उपयोग लेकिन मैं इसे उसी तरह काम करता है। आदेश निष्पादित किया जाता है जब मैं बटन और प्रकार पैरामीटर स्ट्रिंग ठीक मारा, लेकिन मैं इस त्रुटि मिलती है:
अनुवाद: मूल्य खाली नहीं रह सकती। पैरामीटर नाम: प्रकार। सुझाव वस्तु उदाहरण बनाने के लिए नया कीवर्ड का उपयोग करें, मुझे नहीं पता कि नया कीवर्ड कहां रखा जाए। मैंने कमांड पैरामीटर पर कोशिश की है लेकिन यह काम नहीं करेगा। कोई उपाय? धन्यवाद
अद्यतन 3
सभी सलाह के बाद और यहाँ प्राप्त करने में मदद, और बहुत काम है, यहाँ मेरा अंतिम नेविगेशन मेनू और अपने आवेदन इंटरफेस के लिए आधार है।
अच्छा अनुप्रयोग Eric.I wpf.I के लिए नया करने के लिए तुम pls पोस्ट code.It अधिक ज्ञान प्राप्त करने के लिए बहुत मददगार होगा एक ही layout.Could साथ आवेदन डिजाइन करने के लिए संघर्ष कर रहा हूँ। – Oasis