SetValue不会更新UI,但OnPropertyChanged会更新

时间:2012-10-08 01:11:46

标签: c# mvvm microsoft-metro windows-runtime

我有一个控制滑块值的TwoWay绑定:

<Slider Orientation="Vertical" Height="200" Value="{Binding Path=MapScale, Mode=TwoWay}" Maximum="{Binding MaxScale}" Minimum="{Binding MinScale}" StepFrequency="0.1" />

绑定在ViewModel中作为DependencyProperty:

    public static readonly DependencyProperty MapScaleProperty =
         DependencyProperty.Register("MapScale", typeof(Double?), typeof(MappingPageViewModel), new PropertyMetadata(0.0));

    public Double? MapScale
    {
        get { return GetValue(MapScaleProperty) as Double?; }
        set { SetValue(MapScaleProperty, value); OnPropertyChanged("MapScale"); }
    }

现在代码是,当我更新MapScale时,滑块会正确更新(例如MapScale += .1)。但是,如果我删除了OnPropertyChanged方法(我已经调用了SetValue之下),则滑块无法正常更新。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

Slider.Value的类型为double,而不是Nullable<double>。我注意到WinRT对于匹配绑定类型非常挑剔。它不会像WPF和Silverlight那样为您自动转换大多数内容。

我的回答是:

使用INotifyPropertyChanged作为@Adi已提及并使用double作为属性类型。

如果您在视图模型中使用Nullable<double>,则创建一个将null转换为零的IValueConverter