ContentView 属性和 ViewModel 的对象属性之间的绑定错误 - 为什么?

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

我正在 MVVM 中开发 MAUI 应用程序,并且遇到了我不理解的绑定错误(当运行应用程序并导航到相关页面时)。这就是我正在做的事情:

在页面中,我使用 ProgressBar 控件并将其 Progress 属性绑定到 ViewModel 中定义的对象的属性,该对象是页面的 BindingContext:

<tt:ProgressBar Progress="{Binding SessionProgression.ProgressionRatio}" />

ViewModel 属性定义:

[ObservableProperty]
private TimeProgression _sessionProgression = new TimeProgression();

以及相关对象的类定义(类的其余部分更新属性值并调用 OnPropertyChanged("TimeProgression"),但为了清楚起见,我没有包含它):

public sealed class TimeProgression : ObservableObject
{
    public double ProgressionRatio { get; private set; }
}

我收到以下错误:

错误 127 TimeProgression ProgressionRatio ProgressBar.Progress Double 'ProgressionRatio' 在“TimerToolkit.Models.TimeProgression”上找不到属性,目标 属性:'TimerToolkit.Controls.ProgressBar.Progress'

请注意,如果我将 ProgressionRatio 属性放入 ViewModel 中而不是 ViewModel 的 TimeProgression 实例中,则不会发生绑定错误。在这两种情况下,正确的值都会在运行时解析。

我在这里缺少什么?感谢您花时间阅读我的文章。

c# xaml binding maui
1个回答
0
投票

我做了一个演示来测试你的代码,

这是 XAML 文件,

<ScrollView>
    <VerticalStackLayout
        Padding="30,0"
        Spacing="25">

        <Label
            Text="Hello, World!"
            Style="{StaticResource Headline}"
            SemanticProperties.HeadingLevel="Level1" />

        <ProgressBar Progress="{Binding SessionProgression.ProgressionRatio}" />
    </VerticalStackLayout>
</ScrollView>

在后面的代码中设置BindingContext,

public MainPage()
{
    InitializeComponent();
    this.BindingContext = new MainPageViewModel();
}

并像这样定义 ViewModel,

public partial class MainPageViewModel : ObservableObject
{
    [ObservableProperty]
    private TimeProgression _sessionProgression = new TimeProgression();

    public MainPageViewModel()
    {
        

    }
}

ProgressionRatio
的初始值设置为 0.5,

public sealed class TimeProgression : ObservableObject
{
    public double ProgressionRatio { get; private set; }

    public TimeProgression()
    {
        ProgressionRatio = 0.5;
    }
}

这是效果,

© www.soinside.com 2019 - 2024. All rights reserved.