数据绑定 属性 值 "Flickers"

Data-Binding Property Value "Flickers"

问题:

当我通过滑块或 NumericUpDown 在 GUI 中更改“LuxVoltage”的值时,值从“默认值跳转”(在本例中为 0)到“实际值”。假设我将值设置为 1000 并打印出每个集合,这就是输出的样子(有点像“flickers”):

输出:

0
1000
0
1000
[repeat]

XAML:(使用MahApps.Metro "NumericUpDown")

<metro:NumericUpDown
    Value="{Binding LuxVoltage, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
    Minimum="0"
    Maximum="65535"
    />
<Slider
    Value="{Binding LuxVoltage, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
     Minimum="0"
     Maximum="65535"
    />

C#:(使用棱镜 "BindableBase")

private ushort _luxVoltage = 0;
public ushort LuxVoltage
{
    get { return _luxVoltage; }
    set { SetProperty(ref _luxVoltage, value); }
}

要求:

我需要从两个控件操纵相同的值。 “slider”可以简单地快速更改值,而“NumericUpDown”提供精度

我不知道你为什么有闪烁问题,但是当我过去有两个 GUI 东西从一个值链接起来时,我总是采用绑定的方法(使用你的案例) NumericUpDown 到您的视图模型中的 属性,然后将 Slider 绑定到 NumericUpDown 属性。它可能适合你。

Slider的Value类型是double。当您绑定到 ushort 时,即使滑块没有移动,也会导致多次更新。这可能会导致其他控件触发其他更改,请尝试将其添加到 Slider 绑定中,这样当您拖动滑块时,它只会按默认为“1.0”的刻度频率递增。

IsSnapToTickEnabled="True"

似乎实际问题存在于我的代码库中的其他地方。

- Binding from 2 Controls to one Property schould just work fine.

- Or consider binding one of the Controls to the value of the other, whose value is bound to the Property*

在调用 SetProperty 之前,请尝试检查 setter 上的传入值以进行有意义的更改。

private ushort _luxVoltage = 0;
public ushort LuxVoltage
{
    get { return _luxVoltage; }
    set 
    {
        if (_luxVoltage != value)
        { 
            SetProperty(ref _luxVoltage, value); 
        }
    }
}