Приведу пример кода:
public class Node : INotifyPropertyChanged
{
public ISource Source { get; set; }
public string Name => Source.Setting.Name;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}
И привязка:
<TextBlock Margin="3,0,0,0" Text="{Binding Name}" />
Для привязки используется Fody. Проблема в следующем: При изменении внешним кодом значения Source.Setting.Name, Name в классе Node не бросает OnChange() и естественно вьюшка не обновляется. Конечно, можно в xaml сделать привязку к Source.Setting.Name и тогда проблем не будет, но это мне не подходит, поскольку вместо ISource может быть другой класс и свойство Name будет лежать по другому пути.. Так же можно создать событие и бросать его в сеттере свойства Source.Setting.Name, однако хотелось бы избежать подобного.
Вопрос. Как мне вызвать OnChange() у Name при изменении Source.Setting.Name? Возможно, изначально всё сделано неверно. Подскажите, пожалуйста, решение.
Т.к. у вас Source
не меняется, рекомендую его фактически неизменяемым и сделать, это позволит оформить подписку один раз в конструкторе (иначе придется отписываться от старого экземпляра и подписываться на новый в сеттере свойства):
public class Node : INotifyPropertyChanged
{
public ISource Source { get; }
...
Теперь, в конструкторе:
public Node(ISource source)
{
Source = source;
Source.Setting.PropertyChanged += (s, args) =>
{
if (args.PropertyName == nameof(ISetting.Name))
OnPropertyChanged(nameof(Name));
};
}
Т.е. мы вручную перехватываем сообщения об изменениях свойства Name
в Setting
и говорим GUI что надо перечитать и наше Name
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть лог файл в json форматеМне необходимо удалить лишние строки заключенные в фигурные скобки в которых есть "processName": "GM_Scheduler"
Всем привет, у меня имеется клиент серверное приложение на приложение на Aspnet core помимо основного проекта, появилась необходимость добавить...
Есть служба, которая мониторит почту, в случае когда приходит письмо, получает вложения и дальше с ними работаетВо время разработки и тестирования...
после того как запущен звуковой файл с помощью ProcessStart("D:\prg