数据绑定属性值“闪烁”

时间:2016-09-09 12:14:50

标签: c# wpf 2-way-object-databinding

问题:

当我通过Slider或NumericUpDown更改GUI中“ LuxVoltage ”的值时,Value从“默认值”(在本例中为0)跳转到“实际值”。假设我将Value设置为1000并打印出每一组,这就是输出的样子(它有点“闪烁”):

输出:

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); }
}

要求

我需要从两个控件中操纵相同的值。 “滑块”只需快速更改值,“ NumericUpDown ”即可提供精确度

4 个答案:

答案 0 :(得分:0)

我不知道你为什么会出现闪烁问题,但是当我过去有两个由一个值链接的GUI事物时,我总是选择这种方法(使用你的情况) )将NumericUpDown绑定到viewmodel中的属性,然后将Slider绑定到NumericUpDown属性。它可能适合你。

答案 1 :(得分:0)

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

IsSnapToTickEnabled="True"

答案 2 :(得分:0)

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

  

- 从2个控件绑定到一个属性可以正常工作。

     

- 或者考虑将其中一个控件绑定到另一个控件的值,其值绑定到Property *

答案 3 :(得分:0)

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

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