MAUI - 绑定到集合中的嵌套属性。 Markdown 中的 OnPropertyChanged 中继

问题描述 投票:0回答:1

我的设置非常复杂,并且缺少一些东西。绑定正在工作,但当我调用 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,但无法成功实现。

.net mvvm maui-community-toolkit net-maui
1个回答
0
投票

我看不到 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.