我的设置非常复杂,并且缺少一些东西。绑定正在工作,但当我调用 UpdateValue 方法时,OnPropertyChanged 不会刷新视图。
当我收到包含新数据的消息时,我使用 UpdateValue 方法更新 SinglePropertyConfigs 中的值。
最小尺寸型号
public partial class SingleAxisConfig() : ObservableObject
{
public ObservableCollection<AxisDisplay> Displays;
}
public partial class AxisDisplay : ObservableObject
{
[ObservableProperty]
private UnitEnum unit;
[ObservableProperty]
private string value = "defValue";
[ObservableProperty]
private string valueFormat = "#0.000";
public void UpdateValue(Quantity? value)
{
if (value == null || double.IsNaN(value.Value))
{
Value = "---";
}
else
{
Value = value.ToString(ValueFormat);
}
}
}
视图模型
public partial class AxisViewModel : BaseViewModel
{
public ObservableCollection<SingleAxisConfig> AxisConfigsInOrder
...
}
查看
public AxisView(AxisViewModel vm) : base(vm)
{
var axisConfigTemplate = new AxisConfigTemplate();
Content = new CollectionView
{
ItemTemplate = axisConfigTemplate
}.Bind(CollectionView.ItemsSourceProperty, nameof(vm.AxisConfigsInOrder));
}
在我这样绑定的模板里面
new Label()
.Bind(Label.TextProperty,
static (SingleAxisConfig model) => model.Displays[2].Value,
mode: BindingMode.OneWay),
我确实认为问题在于绑定中的点调用,但我只是不知道该怎么做。
我找到了这个https://github.com/CommunityToolkit/Maui.Markup/discussions/203,但无法成功实现。
我看不到 UpdateValue 是如何被调用的。我看不出实施有什么问题。
然而 Value 似乎是 Quantity 和 ValueFormat 的衍生品,我将 AxisDisplay 重写为:
public partial class AxisDisplay : ObservableObject
{
[ObservableProperty]
private UnitEnum unit;
[ObservableProperty]
[NotifyValueChangedFor(nameof(Value))]
private Quantity? quantity = null;
[ObservableProperty]
[NotifyValueChangedFor(nameof(Value))]
private string valueFormat = "#0.000";
public string Value
=> (Quantity is null || double.IsNaN(Quantity.Value))
? "---"
: Quantity.Value.ToString(ValueFormat);
}