Dotnet wpf_binding collaborative projects
По-перше Binding це прив'язка даних, це просто і думаю все це прекрасно розуміють і ні для кого це не стане одкровенням. Але не всі розуміють що з чим прив'язується і навіщо це треба, ну так давайте спробуємо в цьому розібратися. Перша і найголовніша корисність яку ми отримуємо при використанні Binding # 'ов це поділ понять відображення і логіки, тобто грубо кажучи ми маємо якусь «морду» яку ми показуємо користувачеві і логіку даних яка захована за цією «мордою». Так ось, почнемо з простого прикладу, як все починають.
і відповідно код нашої логіки даних, чи то пак SampleBinding.cs файл:
що нам треба, при старті програми завантажити в helloBox рядок «Click Hello button» а після натискання кнопки поміняти текст на «Hello», начебто все просто, але після запуску програми ми бачимо що нічого не працює. Чому скажіть ви, адже у нас є рядок Text = "" яка повинна була забезпечити нам прив'язку, а тому що просто прив'язка нічого не означає, адже ми не вказали вікна звідки брати дані, прив'язка є але з чим не сказано. Ми повинні дати нашому вікна DataContext до даних якого ми будемо прив'язувати поля нашої форми. DataContext у нас є, і навіть більше того судячи по рядку Window x: Class = "WpfBinding.SampleBinding» він уже пов'язаний з нашим вікном, але все-ж щоб завершити прив'язку трохи модифікуємо наш код наступним чином.
Розглянемо що змінилося в коді вікна. А змінилося то що ми дали ім'я sampleWindow класу нашого вікна і сказали текстового поля що брати дані треба з елемента з ім'ям sampleWindow по шляху TextData, по суті задавши йому цим самим DataContext. Але і цього поки мало тому як при ініціалізації вікна коли після створення елементів инициализируются прив'язки в TextData не задані значення і ми прив'язуємося до порожнього полю. Так як же бути, як повідомити вікна, або навіть не вікна, а текстового поля що дані в нашому класі логіки змінилися. Для цього нам знадобитися той чарівний інтерфейс про який я не раз згадував відповідаючи на питання по прив'язці даних в топіках нашого форуму і який так ніхто і не хоче бачити в упор, мова йде про INotifyPropertyChanged з System.ComponentModel. Що він нам дає, а дає він нам єдина подія яке посилає вікна PropertyChangedEventArgs сповіщаючи про те що змінилося поле обнови дані. І ось як буде виглядати код SampleBinding.cs після модифікації
Розглянемо що що ми маємо. В результаті реалізації INotifyPropertyChanged як я говорив раніше ми отримуємо подія public event PropertyChangedEventHandler PropertyChanged відданих вікна повідомлення з ім'ям поля класу даних в якому відбулися зміни даних завдяки чому вікно може оновити своє відображення. Так ось виходить що не так вже й багато треба для успішного застосування прив'язки даних, а саме: вікно з елементами які знають звідки і як брати дані і логіка вміє вчасно повідомити про те що дані змінилися ...