gpt4 book ai didi

c# - SetValue 不更新 UI 但 OnPropertyChanged 会

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:19 25 4
gpt4 key购买 nike

我有一个控制 slider 值的 TwoWay 绑定(bind):

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

绑定(bind)作为 DependencyProperty 在 ViewModel 中:

    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 时 slider 会正确更新(例如 MapScale += .1)。但是,如果我删除 OnPropertyChanged 方法(我的印象是 SetValue 已经调用),则 slider 不会正确更新。

我错过了什么?

最佳答案

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

我的答案是:

使用 INotifyPropertyChanged正如@Adi 已经提到的那样并使用 double作为属性类型。

如果您无法使用 Nullable<double>在你的 View 模型中,然后创建一个 IValueConverter将 null 转换为零。

关于c# - SetValue 不更新 UI 但 OnPropertyChanged 会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com