Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RadNumericUpDown增量率_C#_Wpf_Xaml_Telerik_Prism - Fatal编程技术网

C# RadNumericUpDown增量率

C# RadNumericUpDown增量率,c#,wpf,xaml,telerik,prism,C#,Wpf,Xaml,Telerik,Prism,我在C#Prism MVVM应用程序中使用TelerikRadNumericUpDown控件。当我的用户按住向上或向下箭头时,控件将增加其绑定到的属性的值。但是,当该属性值发生更改时,会通过通信线路向另一个设备发送一个命令,并有一定的延迟。此外,在某些情况下,设备无法成功更改此参数的值 这是我的观点中的代码 <telerik:RadNumericUpDown x:Name="VoltageNumericControl" HorizontalAlignment="

我在C#Prism MVVM应用程序中使用Telerik
RadNumericUpDown
控件。当我的用户按住向上或向下箭头时,控件将增加其绑定到的属性的值。但是,当该属性值发生更改时,会通过通信线路向另一个设备发送一个命令,并有一定的延迟。此外,在某些情况下,设备无法成功更改此参数的值

这是我的观点中的代码

<telerik:RadNumericUpDown x:Name="VoltageNumericControl" HorizontalAlignment="Left" Margin="165,0,0,0" Grid.RowSpan="1" VerticalAlignment="Center" Grid.Row="2" NumberDecimalDigits="2" Maximum="10.00" Minimum="0.00" SmallChange="0.01" ValueFormat="Numeric"  
Value="{Binding ModelDevice.Voltage, Mode=TwoWay, Delay= 50}"/>

如何更改
RadNumericUpDown
控件的行为,以便按住按钮或箭头键不会试图持续更新其绑定属性的值?

在外部设备请求挂起时禁用控件,然后再次启用该控件如何,当您有一个响应并且知道正确的值时?从
UIElement
派生的每个控件都有一个属性,可用于停用用户输入(控件显示为灰色)

获取或设置一个值,该值指示是否在用户界面(UI)[…]中启用此元素 未启用的元素不参与命中测试或聚焦,因此不会成为输入事件的来源

您可以在视图模型中创建属性IsExternalDeviceNotPending。并将其绑定到
RadNumericUpDown
上的
IsEnabled
属性。注意
.NotPending
(启用意味着无外部设备挂起)。如果要使其成为一个正条件(
…Pending
),则必须使用XAML中的值转换器对该值求反,因此这更简单

private bool isExternalDeviceNotPending;
public bool IsExternalDeviceNotPending
{
    get => isExternalDeviceNotPending;
    private set => SetProperty(ref isExternalDeviceNotPending, value);
    }
}

通信完成后,将其重置为
true
,以再次启用控件并允许用户输入。

好主意,效果很好!我为布尔(开/关)型开关实现了类似的功能,但并没有考虑将其用于数字控件。谢谢
private bool isExternalDeviceNotPending;
public bool IsExternalDeviceNotPending
{
    get => isExternalDeviceNotPending;
    private set => SetProperty(ref isExternalDeviceNotPending, value);
    }
}
<telerik:RadNumericUpDown x:Name="VoltageNumericControl" IsEnabled="{Binding IsExternalDeviceNotPending}" ... />
public double Voltage
{
    get { return voltage; }
    set
    {
        IsExternalDeviceNotPending = false;
        dataService.SetVoltage(value);
        SetProperty(ref voltage, value);
    }
}