Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menutup Borang WPF daripada ViewModel Menggunakan Harta Terlampir dalam MVVM?
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.
Pertimbangkan borang log masuk biasa yang ViewModel memegang bukti kelayakan pengguna. Apabila menyerahkan arahan log masuk, ViewModel memulakan operasi log masuk:
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>
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.
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>
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>
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!