Laksanakan navigasi paparan ringkas dalam WPF MVVM (tiada rangka kerja luaran diperlukan)
Lihat navigasi dalam aplikasi WPF MVVM membolehkan bertukar antara antara muka pengguna yang berbeza. Artikel ini meneroka cara mudah untuk melaksanakan navigasi tanpa bergantung pada rangka kerja seperti MVVM Light.
Tetapkan model paparan
Buat kelas model paparan asas, tentukan sifat awam dan INotifyPropertyChanged
antara muka. Setiap model paparan konkrit (cth., MainViewModel
, PersonViewModel
, CompanyViewModel
) harus diwarisi daripada kelas asas.
Sambungkan paparan kepada model paparan
Dalam App.xaml
, isytiharkan templat data yang mengaitkan paparan dengan model paparan. Ini akan memberikan paparan yang sesuai berdasarkan model paparan yang ditentukan.
Tunjukkan model paparan dalam ContentControl
Gunakan ViewModel
terikat pada atribut ContentControl
dalam paparan utama untuk memaparkan paparan yang berbeza. Menukar model paparan menukar paparan yang dipaparkan.
Menavigasi daripada subview
Untuk menavigasi daripada subview, buat arahan dalam model paparan utama dan ikat pada butang dalam subview. Apabila dilaksanakan, arahan ini menukar sifat ViewModel
dalam model paparan utama, mencetuskan suis paparan.
Contoh Kod
BaseViewModel:
<code class="language-csharp">public class BaseViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; }</code>
ModelPandangan Utama:
<code class="language-csharp">public class MainViewModel : BaseViewModel { private BaseViewModel viewModel; public BaseViewModel ViewModel { get { return viewModel; } set { viewModel = value; OnPropertyChanged(nameof(ViewModel)); } } public ICommand DisplayPersonView { get; } public MainViewModel() { DisplayPersonView = new RelayCommand(() => ViewModel = new PersonViewModel()); } protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class RelayCommand : ICommand { private readonly Action execute; public event EventHandler CanExecuteChanged; public RelayCommand(Action execute) { this.execute = execute; } public bool CanExecute(object parameter) => true; public void Execute(object parameter) => execute(); }</code>
App.xaml (Templat Data):
<code class="language-xml"><Application.Resources> <DataTemplate DataType="{x:Type ViewModels:MainViewModel}"> <views:MainView/> </DataTemplate> <DataTemplate DataType="{x:Type ViewModels:PersonViewModel}"> <views:PersonView/> </DataTemplate> <DataTemplate DataType="{x:Type ViewModels:CompanyViewModel}"> <views:CompanyView/> </DataTemplate> </Application.Resources></code>
Contoh penggunaan:
<code class="language-xml"><ContentControl Content="{Binding ViewModel}"/></code>
Sila ambil perhatian bahawa contoh ini memerlukan pelaksanaan antara muka INotifyPropertyChanged
dan kelas RelayCommand
yang mudah. OnPropertyChanged
kaedah dan RelayCommand
kelas perlu dilaraskan atau diganti mengikut situasi sebenar projek anda. Awalan views:
mewakili ruang nama paparan anda. Pastikan pandangan dan model paparan anda ditakrifkan dan berkaitan dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan navigasi paparan mudah di WPF MVVM tanpa kerangka luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!