Код: Выделить всё
public ObservableField
{
internal T Val;
public ObservableFile(T val) => this.Val ) val;
...
}
public class DataConfiguration
{
private ObservableField isEnabled;
public bool IsEnabled
{
get => GetValue( ref isEnabled, nameof(IsEnabled));
set
{
if(SetValue( ref isEnabled, nameof(IsEnabled), value))
OnDataChanged(nameof(IsEnabled));
}
}
private ObservableField dataWrapMode;
public bool DataWrapMode
{
get => GetValue( ref dataWrapMode, nameof(DataWrapMode));
set
{
if(SetValue( ref dataWrapMode, nameof(DataWrapMode), value))
OnDataChanged(nameof(DataWrapMode));
}
}
...
}
Код: Выделить всё
private ObservableField dirty;
public bool Dirty
{
get => GetValue( ref dirty, "Dirty");
set
{
if(SetValue( ref dirty, "Dirty", value))
OnDataChanged(**"IsEnabled"**);
}
}
Я также не могу использовать для этого оболочку, так как их много. магии с атрибутами и отражением, позволяющими обнаружить свойства в том виде, в каком они показаны в графическом интерфейсе.
с макросами в стиле C это было бы просто (но не красиво и не идиоматично):
Код: Выделить всё
#define OBSERVABLE_WITH_ACCESSORS(name,type) \
private ObservableField _##name; \
public ##type ##name \
{ \
get => GetValue( ref _##name, nameof(##name)); \
set \
{ \
if(SetValue( ref _##name, nameof(##name), value)) \
OnDataChanged(nameof(##name)); \
} \
}
если это невозможно легко сделать в C#-8.0, предложения по более новым стандартам также приемлемы, поскольку мы намерены перейти в будущем.
Подробнее здесь: https://stackoverflow.com/questions/790 ... l-accesors
Мобильная версия