Hello. Could you please help me figure out what I’m doing wrong?
Previously, in my PressureData class, I defined Speed like this:
[SerializeField] private int speed;
[CreateProperty] public int Speed
{
get => speed;
set
{
speed = value;
speedBinding?.MarkDirty();
}
}
private DataBinding speedBinding;
public DataBinding SpeedBinding => speedBinding ??= new DataBinding {
dataSourcePath = new PropertyPath(nameof(Speed)),
updateTrigger = BindingUpdateTrigger.OnSourceChanged,
bindingMode = BindingMode.ToTarget,
};
And the binding in the necessary VisualElement worked like this:
dataSource = pressureData = _pressureData;
SetBinding(nameof(Speed), pressureData.SpeedBinding);
Everything worked in the binding, and the interface updated correctly.
Now, I’ve added a class:
[Serializable]
public class BindableProperty<T>
{
[SerializeField] public T value;
[SerializeField] private BindingUpdateTrigger updateTrigger;
[SerializeField] private BindingMode bindingMode;
public string PropertyName { get; }
[CreateProperty] public T Value
{
get => value;
set
{
this.value = value;
binding?.MarkDirty();
}
}
private DataBinding binding;
public DataBinding Binding => binding ??= new DataBinding
{
dataSourcePath = new PropertyPath($"{PropertyName}.Value"),
updateTrigger = updateTrigger,
bindingMode = bindingMode,
};
public BindableProperty(T initialValue, string propertyName, BindingUpdateTrigger updateTrigger = BindingUpdateTrigger.WhenDirty, BindingMode bindingMode = BindingMode.ToTarget)
{
value = initialValue;
PropertyName = propertyName;
this.updateTrigger = updateTrigger;
this.bindingMode = bindingMode;
}
}
And in PressureData, I defined it like this:
[CreateProperty] public BindableProperty<int> Speed = new BindableProperty<int>(0, "Speed", BindingUpdateTrigger.OnSourceChanged);
The binding is now:
SetBinding(nameof(Speed), pressureData.Speed.Binding);
But now the interface does not update as expected. What am I doing wrong?