Я создал универсальный наблюдаемый класс-обертку, чтобы я мог просто обернуть любой объект, чтобы сделать его наблюдаемым (гораздо лучше, чем злоупотребление observablecollection, я думаю).Это прекрасно работает, но я должен использовать Thing.Value = newValue, а не просто Thing = newValue.Я добавил неявные операторы, которые, кажется, заставляют последние частично работать, при использовании Thing = newValue он получает правильное значение, но привязка элемента GUI к нему не обновляется.Я думаю, что он либо не уведомляет, ни теряет учетную запись подписчика, возможно, потому что это новый объект, но не уверен.Возможно, неявный оператор должен возвращать тот же объект после установки значения, но я еще не выяснил, как ссылаться на него.
Как мне сделать, чтобы Thing = newValue все еще можно было наблюдать?
Редактировать:скопируйте пример из блока кода здесь для ясности.
Как я могу получить StatusVisibility = Visibility. Видимо, чтобы его можно было наблюдать?Моя цель - не добавлять .Value каждый раз, когда я присваиваю значение наблюдаемой.
public class Observable<T> : INotifyPropertyChanged
{
public Observable(T value = default(T))
{
Value = value;
}
public event PropertyChangedEventHandler PropertyChanged;
private T value;
public T Value
{
get
{
return value;
}
set
{
this.value = value;
NotifyPropertyChanged();
}
}
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public static implicit operator Observable<T>(T value)
{
return new Observable<T>(value);
}
public static implicit operator T(Observable<T> value)
{
return (T)value;
}
}
public partial class MainWindow : Window
{
//WPF GUI element binds to this
public static Observable<Visibility> StatusVisibility { get; set; }
= new Observable<Visibility> { Value = Visibility.Hidden };
//GUI updates when this is called
StatusVisibility.Value = Visibility.Visible;
//GUI element does not update when this is called
StatusVisibility = Visibility.Visible;
}