RadNumericUpDown 增量率
Posted
技术标签:
【中文标题】RadNumericUpDown 增量率【英文标题】:RadNumericUpDown Increment Rate 【发布时间】:2021-08-28 01:03:25 【问题描述】:我在 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"/>
它会增加我的 ViewModel 中的值,例如:
public double Voltage
get return voltage;
set
dataService.SetVoltage(value); // Triggers command to external device
SetProperty(ref voltage, value); // Updates local value temporarily
// Value is then updated an indeterminate period later when a response is
// received from the external device
如何更改RadNumericUpDown
控件的行为,以便按住按钮或箭头键时不会尝试不断更新其绑定到的属性的值?
【问题讨论】:
【参考方案1】:如何在外部设备请求未决时禁用控件并在您有响应并且知道正确值时再次启用它?从UIElement
派生的每个控件都有一个属性IsEnabled
,可用于停用用户输入(控件显示为灰色)。
获取或设置一个值,该值指示是否在用户界面 (UI) [...] 中启用此元素 未启用的元素不参与命中测试或焦点,因此不会成为输入事件的来源。
您可以在视图模型中创建属性IsExternalDeviceNotPending
。并将其绑定到RadNumericUpDown
上的IsEnabled
属性。注意 ..NotPending
(启用意味着没有外部设备挂起)。如果你想让它成为一个肯定的条件 (...Pending
),你必须在 XAML 中使用一个值转换器来否定这个值,所以这更简单。
private bool isExternalDeviceNotPending;
public bool IsExternalDeviceNotPending
get => isExternalDeviceNotPending;
private set => SetProperty(ref isExternalDeviceNotPending, value);
<telerik:RadNumericUpDown x:Name="VoltageNumericControl" IsEnabled="Binding IsExternalDeviceNotPending" ... />
现在您可以在设置Voltage
时将IsExternalDeviceNotPending
设置为false
,进而开始与外部设备的通信。该控件将被禁用。
public double Voltage
get return voltage;
set
IsExternalDeviceNotPending = false;
dataService.SetVoltage(value);
SetProperty(ref voltage, value);
通信完成后,将其重置为true
,以再次启用控件并允许用户输入。
【讨论】:
好主意,效果很好!我已经为布尔(开/关)类型的开关实现了类似的东西,但没有考虑将它与数字控件一起使用。谢谢!以上是关于RadNumericUpDown 增量率的主要内容,如果未能解决你的问题,请参考以下文章