Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menutup Borang WPF daripada ViewModel Menggunakan Harta Terlampir dalam MVVM?

Bagaimanakah Saya Boleh Menutup Borang WPF daripada ViewModel Menggunakan Harta Terlampir dalam MVVM?

Mary-Kate Olsen
Lepaskan: 2025-01-23 02:44:11
asal
228 orang telah melayarinya

How Can I Close a WPF Form from the ViewModel Using an Attached Property in MVVM?

Tutup borang WPF dalam MVVM menggunakan sifat yang dilampirkan

Dalam aplikasi MVVM, menguruskan penutupan borang boleh menjadi mencabar kerana ViewModel tidak mengetahui tentang paparan sebenar. Artikel ini meneroka penyelesaian yang elegan menggunakan sifat yang dilampirkan untuk menutup borang daripada ViewModel dengan lancar.

Dilema

Pertimbangkan borang log masuk biasa yang ViewModel memegang bukti kelayakan pengguna. Apabila menyerahkan arahan log masuk, ViewModel memulakan operasi log masuk:

  • Selepas log masuk berjaya, borang log masuk perlu ditutup dan DialogResult yang sah dikembalikan.
  • Apabila log masuk tidak sah, mesej ralat akan dipaparkan dan borang akan kekal terbuka.

Lepaskan halangan dengan atribut tambahan

Untuk menangani cabaran ini, kami boleh memanfaatkan sifat tambahan untuk merapatkan jurang antara ViewModel dan View:

<code class="language-xml"><Window ... DialogResult="{Binding DialogResult, Source={StaticResource ViewModel}}"
       xmlns:xc="clr-namespace:ExCastle.Wpf">
</Window></code>
Salin selepas log masuk

Harta ini mengikat sifat DialogResult ViewModel kepada sifat DialogResult tetingkap. Apabila ViewModel mengubah suai DialogResult, sifat yang dilampirkan secara automatik mengemas kini DialogResult tetingkap dan menutup borang dengan sewajarnya.

Pelaksanaan kod

Berikut ialah kod untuk atribut yang dilampirkan:

<code class="language-csharp">using System.Windows;

namespace ExCastle.Wpf
{
    public static class DialogCloser
    {
        public static readonly DependencyProperty DialogResultProperty =
            DependencyProperty.RegisterAttached(
                "DialogResult",
                typeof(bool?),
                typeof(DialogCloser),
                new PropertyMetadata(DialogResultChanged));

        private static void DialogResultChanged(
            DependencyObject d,
            DependencyPropertyChangedEventArgs e)
        {
            var window = d as Window;
            if (window != null)
                window.DialogResult = e.NewValue as bool?;
        }
        public static void SetDialogResult(Window target, bool? value)
        {
            target.SetValue(DialogResultProperty, value);
        }
    }
}</code>
Salin selepas log masuk

Dalam ViewModel, cuma laksanakan INotifyPropertyChanged dan kemas kini sifat DialogResult apabila log masuk berjaya:

<code class="language-csharp">private bool? _dialogResult;
public bool? DialogResult
{
    get { return _dialogResult; }
    set
    {
        _dialogResult = value;
        OnPropertyChanged(nameof(DialogResult));
    }
}

// 登录命令逻辑
public ICommand LoginCommand { get; set; }</code>
Salin selepas log masuk

Kesederhanaan dan Kesucian

Pendekatan ini menyelesaikan masalah penutupan borang secara elegan tanpa menjejaskan prinsip MVVM. ViewModel kekal dipisahkan daripada paparan sambil mengawal penutupan borang secara berkesan melalui pengikatan harta mudah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menutup Borang WPF daripada ViewModel Menggunakan Harta Terlampir dalam MVVM?. 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