C# SetValue不更新UI,但OnPropertyChanged会更新UI
我有一个双向绑定,可以控制滑块的值:C# SetValue不更新UI,但OnPropertyChanged会更新UI,c#,mvvm,microsoft-metro,windows-runtime,C#,Mvvm,Microsoft Metro,Windows Runtime,我有一个双向绑定,可以控制滑块的值: <Slider Orientation="Vertical" Height="200" Value="{Binding Path=MapScale, Mode=TwoWay}" Maximum="{Binding MaxScale}" Minimum="{Binding MinScale}" StepFrequency="0.1" /> 正如代码现在所示,当我更新MapScale时,滑块会正确更新,例如MapScale+=.1。但是,如果我删除
<Slider Orientation="Vertical" Height="200" Value="{Binding Path=MapScale, Mode=TwoWay}" Maximum="{Binding MaxScale}" Minimum="{Binding MinScale}" StepFrequency="0.1" />
正如代码现在所示,当我更新MapScale时,滑块会正确更新,例如MapScale+=.1。但是,如果我删除了OnPropertyChanged方法(我在SetValue调用的印象下),滑块将无法正确更新
我错过了什么 Slider.Value的类型为double,不可为null。我注意到WinRT对匹配绑定类型非常挑剔。它不会自动转换像WPF和Silverlight这样的大多数东西
我的答案是:
使用INotifyPropertyChanged as@Adi,并使用double作为属性类型
如果无法在视图模型中使用Nullable,请创建一个将null转换为零的IValueConverter Slider.Value的类型为double,不可为null。我注意到WinRT对匹配绑定类型非常挑剔。它不会自动转换像WPF和Silverlight这样的大多数东西
我的答案是:
使用INotifyPropertyChanged as@Adi,并使用double作为属性类型
如果无法在视图模型中使用Nullable,请创建一个将null转换为零的IValueConverter 使用依赖项属性而不是常规属性有什么原因吗?我不认为我见过在viewmodel中使用DPs的例子,当谈到viewmodels时,我自己也总是使用普通的旧属性。DPs似乎是Metro应用程序的发展方向。对于普通的旧属性,您使用了OnPropertyChanged还是其他什么?是的,INotifyPropertyChanged。使用依赖属性而不是常规属性有什么原因吗?我不认为我见过在viewmodel中使用DPs的例子,当谈到viewmodels时,我自己也总是使用普通的旧属性。DPs似乎是Metro应用程序的发展方向。对于普通的旧属性,您使用了OnPropertyChanged还是其他什么?是的,INotifyPropertyChanged。
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"); }
}