Tetapkan fokus TextBox daripada ViewModel dalam WPF
Dalam pembangunan aplikasi WPF, kadangkala perlu menetapkan fokus kawalan khusus daripada ViewModel. Ini boleh dicapai dengan menggunakan gabungan sifat melekat dan teknik mengikat.
Elakkan merujuk terus elemen UI dalam ViewModel
Dalam kod sampel, cs.txtCompanyID
mengakses terus elemen UI dalam paparan. Biasanya tidak disyorkan untuk merujuk terus elemen UI dalam lapisan ViewModel, kerana ini akan menyebabkan kod digabungkan dengan UI dan mengurangkan kebolehujian.
Gunakan atribut yang dilampirkan untuk pengurusan fokus
Pendekatan yang lebih baik ialah menggunakan sifat yang dilampirkan, yang boleh diikat pada sifat ViewModel. Dalam kes ini, kita boleh mencipta sifat yang dilampirkan dipanggil IsFocused
yang menerima nilai boolean yang menunjukkan sama ada kawalan yang berkaitan harus mempunyai fokus.
Berikut ialah contoh pelaksanaan IsFocused
harta yang dilampirkan:
<code class="language-csharp">public static class FocusExtension { public static bool GetIsFocused(DependencyObject obj) { return (bool)obj.GetValue(IsFocusedProperty); } public static void SetIsFocused(DependencyObject obj, bool value) { obj.SetValue(IsFocusedProperty, value); } public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached( "IsFocused", typeof(bool), typeof(FocusExtension), new UIPropertyMetadata(false, OnIsFocusedPropertyChanged)); private static void OnIsFocusedPropertyChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { var uie = (UIElement)d; if ((bool)e.NewValue) { uie.Focus(); // 忽略false值 } } }</code>
Ikat sifat tambahan pada ViewModel
Sebaik sahaja anda mempunyai sifat yang dilampirkan, anda boleh mengikatnya pada sifat ViewModel yang menunjukkan sama ada kawalan harus mempunyai fokus. Dalam paparan anda (XAML) anda boleh mengikat harta IsFocused
kepada sifat ViewModel yang sepadan:
<code class="language-xml"><TextBox local:FocusExtension.IsFocused="{Binding IsUserNameFocused}"></TextBox></code>
Nyahpepijat menggunakan kod sumber .NET
Jika anda menghadapi masalah menetapkan fokus, pertimbangkan untuk menyahpepijat kod sumber .NET untuk mendapatkan cerapan tentang tingkah lakunya. Di sini anda boleh melihat cara rangka kerja asas mengendalikan fokus dan mungkin mengenal pasti sebarang perbezaan dalam pelaksanaan tersuai anda.
Atas ialah kandungan terperinci Bagaimana untuk menetapkan fokus pada kotak teks WPF dari ViewModelnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!