Я изучаю WPF, и непосредственно тему "привязки", и решил применить их в деле. Попробовал реализовать следующий пример:
Пусть есть класс Phone (как видите не используются свойства зависимостей)
public class Phone
{
public string Title { get; set; }
public int Price { get; set; }
}
В ресурсах окна, я добавляю этот объект и задаю значения его свойств:
<Window.Resources>
<local:Phone Title="Xiaomi" Price="10000" x:Key="myPhone"/>
</Window.Resources>
И вот таким образом данные выводятся:
<TextBlock Grid.Column="0" Grid.Row="0" Text="Модель:"/>
<TextBlock Grid.Column="1" Grid.Row="0" Text="Цена:"/>
<TextBox Grid.Column="0" Grid.Row="1" Text="{Binding Source={StaticResource myPhone}, Path=Title, Mode=TwoWay}" />
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Source={StaticResource myPhone}, Path=Price, Mode=TwoWay}" />
Так-же есть кнопки, чтобы вывести текущее значение объекта, а так-же чтобы его изменить:
<Button Content="Вывести текущие значения" Click="Button_Click_1" />
<Button Content="Изменить значение класса " Click="Button_Click_2" />
Обработчики нажатий:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Phone phone = (Phone)this.Resources["myPhone"];
MessageBox.Show($"Модель: {phone.Title}; Стоимоть: {phone.Price}");
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
Phone phone = (Phone)this.Resources["myPhone"];
phone.Title = "iphone 6s";
phone.Price = 50000;
}
В результате получается такая графика (это не все приложение, я в нем разные вещи тестирую, но чтобы не отвлекаться на них, только непосредственно относящиеся участки кода привожу)
Далее я не знаю стоит ли приводить скрниншоты, если нужно то отправлю пишите. Суть в чем: работает на половину, ну то есть в одну сторону привязка работает, а в другую нет.
Приемник -> Источник
Я удивился, но да это работает. При чем не применяются никакие свойства зависимостей. (Хотя если я правильно понимаю, то свойство зависимостей, это как наверно можно перевести зависимое свойство)
Источник -> Приемник
Вот тут максимально странно. Это работает при старте программы, но при работе программы изменения источника (Свойства Title и Price) не влияют на свойства приемника (Свойства Text). При этом, если я вывожу значение свойств класса через нажатие кнопки, то там они действительно изменились. То есть вроде наоборот более простая связь, от источника к приемнику по какой-то причине не работает.
Мне в первую очередь хочется понять не как это исправить, а то почему программа ведет себя именно так? То что приемник меняет источник это круто тут вопросов нет, но почему источник не меняет приемник? А именно почему он меняет его только один раз, а потому нет, вот именно этот момент наиболее не ясен.