【发布时间】:2020-10-29 10:41:49
【问题描述】:
我试图在 Slider 最大值上使用 ViewModel 属性,但是当我使用 Binding 时,滑块总是将当前值显示为 0。
使用固定值,它可以工作:
<Slider Minimum="0" Maximum="16" Value="{Binding SliderStep, Mode=OneWay}" HorizontalOptions="CenterAndExpand" />
但是最大值是可变的,所以我需要从 ViewModel 中绑定它,当我尝试这样做时出现问题:
<Slider Minimum="0" Maximum="{Binding SliderMax}" Value="{Binding SliderStep, Mode=OneWay}" HorizontalOptions="CenterAndExpand" />
ViewModel 代码:
double sliderStep;
public double SliderStep
{
get
{
return sliderStep;
}
set { sliderStep = value;
OnPropertyChanged("SliderStep");
}
}
double sliderMax;
public double SliderMax
{
get
{
return sliderMax;
}
set {
sliderMax = value;
OnPropertyChanged();
}
}
public SectionGraphicViewModel(INavigation navigation)
{
this.Navigation = navigation;
sectionRep = new SectionRepository();
this.Sections = sectionRep.GetSections().ToList();
Items = new List<SectionGraphicModel>();
foreach (var item in this.Sections)
{
var SectionView = new SectionModel(item);
Items.Add(new SectionGraphicModel(){ Source = SectionView.CachedImageUsed.Source, Desc = SectionView.Desc, Id = SectionView.Id });
}
SliderMax = items.Count();
if (sectionId.HasValue)
{
SliderStep = items.FindIndex(x => x.Id == sectionId);
}
else
{
SliderStep = 0;
}
}
这个例子的最大值是16,我用不同的值测试,结果是一样的。 我只在安卓模拟器上测试过。我不知道它是否会发生在 iOS 上。
PS:为了避免误解,我需要让Maximum属性绑定一个来自VM的值,而OneWay,控件将从UI被禁用,只显示来自VM的值。
【问题讨论】:
-
我刚刚做了一个演示,它工作正常。也许您可以上传一个 repo 以进一步使我们能够为您提供帮助。
-
当然,我做了一个示例项目,结果相同,你可以在这里得到它:1drv.ms/u/s!Ai_z8JkGS7hIdOzWIvtMQVg4qKk?e=v4K9b5 在 AppTest.Views.AboutPage 你可以看到 2 个滑块,一个具有静态值(黄色)的工作和一个来自绑定(蓝色)的值不起作用并且以错误的值开头。
标签: xamarin xamarin.forms xamarin.android