Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Почему в одном случае привязка работает, а во втором нет?


- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;
namespace WpfApplication1 { /// /// Логика взаимодействия для MainWindow.xaml /// public partial class MainWindow : Window { public string MyText { get; set; }
public MainWindow() { InitializeComponent(); }
private void MenuItem_Click(object sender, RoutedEventArgs e) { MessageBox.Show(MyText); } } }


Ответ

Замечательный вопрос! Дело в том, что при создании интерфейса когда мы используем Menu, то само меню не перехватывает фокус текущего элемента при нажатии на дочерний MenuItem. Так как в режиме привязки к TextBox по умолчанию стоит режим обновления свойства LostFocus, то соответственно обновиться свойство не может, так как фокус остается на TextBoxe. Это сделано для того, чтобы валидация проходила только после потери фокуса, а не после каждого изменения значения TextBox при наборе. В первом примере нет меню как такового, а MenuItem считается простым контролом. Поэтому при нажатии на него TextBox теряет фокус и свойство обновляется. Проблемы или ошибки здесь нет. Для решения данной задачи нужно просто выбрать другой режим обновления для TextBoxа.

Комментариев нет:

Отправить комментарий