Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk melaksanakan navigasi paparan mudah di WPF MVVM tanpa kerangka luaran?

Bagaimana untuk melaksanakan navigasi paparan mudah di WPF MVVM tanpa kerangka luaran?

Barbara Streisand
Lepaskan: 2025-01-26 20:41:14
asal
629 orang telah melayarinya

How to Implement Simple View Navigation in WPF MVVM without External Frameworks?

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 INotifyPropertyChangedantara 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Contoh penggunaan:

<code class="language-xml"><ContentControl Content="{Binding ViewModel}"/></code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan