我正在 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 实例中,则不会发生绑定错误。在这两种情况下,正确的值都会在运行时解析。
我在这里缺少什么?感谢您花时间阅读我的文章。
我做了一个演示来测试你的代码,
这是 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;
}
}
这是效果,