我是 Xamarin 表单的新手,并且只使用了几个月。我有一个 Xamarin 表单应用程序,它将与 Android 和 iOS 一起使用,并且使用的是 MVVM 结构。我的ObservableCollectionViewModel 中有一个对象,我正在使用扩展的自定义转发器视图进行迭代,StackLayout并且在DataTemplate我有一个自定义 Entry 类的内部,该类扩展了 Entry,该类将其Text属性绑定到对象的Value属性(可为空的双精度值)。
我接下来要做的是,Entry如果我添加到模型中的某个布尔值的值为 true ,则修改模板以隐藏标记,然后显示 aSlider和 aLabel以显示Slider.
到目前为止,我已经能够将Maximum/Minimum属性绑定到我的 Viewmodel 中的属性,这很棒,但是每当我尝试将Value属性绑定到 时Slider,我的 XAML 都不会加载,并且我没有收到任何错误。我还需要实现仅允许用户在给定的“增量”(.1、1、2 等)上滑动的功能。我想滑动Slider,一旦用户停止滑动,该Value属性就会设置并存储在模型中。如果已经存在一个值,我还需要它来预加载,但我可以稍后再使用这两个值。
我想我的做法是错误的。我试过搜索许多不同的例子,但我终生无法弄清楚这一点。
这是滑块/标签的 XAML 外观
<Slider x:Name="slider" Value="{Binding Value}"
Maximum="{Binding VM.Question.NumericMaxValue}"/>
<Label x:Name="displayLabel"
Text="{Binding Source={x:Reference slider}, Path=Value,
StringFormat='The slider value is {0:F0}'}"
HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
我的模型的简化版本,因为我不想将代码放在那里,我可能不应该这样做。
public class MyItemModel
{
private double? _value;
public double? Value
{
get { return _value; }
set
{
if (_value != value)
{
_value = value;
if (!FormatAsTime)
{
if (VM.Question.NumericMaxValue != -1 && Value > VM.Question.NumericMaxValue)
{
Value = VM.Question.NumericMaxValue;
return;
}
if (Value < VM.Question.NumericMinValue)
{
Value = VM.Question.NumericMinValue;
return;
}
RaisePropertyChanged(() => Value);
RaisePropertyChanged(() => HasValue);
}
}
}
}
月关宝盒
相关分类