如何为 WPF 双文本框正确设置 CanExecuteCommand?
How to set CanExecuteCommand correctly for WPF double TextBox?
对于这个例子,我使用 Prism.WPF。我的 WPF 中有一个 TextBox 和一个按钮:
<TextBox Text="{Binding MyDoubleValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Button Width="200" Command="{Binding SaveParametersCommand}">Save</Button>
和相应的属性:
private double _myDoubleValue;
public double MyDoubleValue
{
get { return _myDoubleValue; }
set { SetProperty(ref _myDoubleValue, value); }
}
如果用户更改值以便输入正确的双精度值,则方法应可执行:
private DelegateCommand _saveParametersCommand;
public DelegateCommand SaveParametersCommand =>
_saveParametersCommand ?? (_saveParametersCommand
= new DelegateCommand(ExecuteSaveParametersCommand, CanExecuteSaveParametersCommand)
.ObservesProperty(() => MyDoubleValue))
);
void ExecuteSaveParametersCommand(){ /* ... */}
void CanExecuteSaveParametersCommand(){
// How to ensure that a correct double is inserted?
}
我尝试将双精度数转换为带有“.”的字符串。作为分隔符并检查 string.IsNullOrEmpty()
,但这并没有导致成功。如果用户输入了有效的双精度值,我该如何正确检查?
由于 C# 是一种强类型编程语言,double
属性 例如 MyDoubleValue
只能设置为有效的 double
值。它永远不能设置为其他内容,例如 string
.
(仅)如果将 属性 的类型更改为 string
,则可以使用 double.TryParse
方法确定是否提供了有效值:
private string _myDoubleValue;
public string MyDoubleValue
{
get { return _myDoubleValue; }
set { SetProperty(ref _myDoubleValue, value); }
}
bool CanExecuteSaveParametersCommand()
{
return double.TryParse(_myDoubleValue, out var doubleValue);
}
对于这个例子,我使用 Prism.WPF。我的 WPF 中有一个 TextBox 和一个按钮:
<TextBox Text="{Binding MyDoubleValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Button Width="200" Command="{Binding SaveParametersCommand}">Save</Button>
和相应的属性:
private double _myDoubleValue;
public double MyDoubleValue
{
get { return _myDoubleValue; }
set { SetProperty(ref _myDoubleValue, value); }
}
如果用户更改值以便输入正确的双精度值,则方法应可执行:
private DelegateCommand _saveParametersCommand;
public DelegateCommand SaveParametersCommand =>
_saveParametersCommand ?? (_saveParametersCommand
= new DelegateCommand(ExecuteSaveParametersCommand, CanExecuteSaveParametersCommand)
.ObservesProperty(() => MyDoubleValue))
);
void ExecuteSaveParametersCommand(){ /* ... */}
void CanExecuteSaveParametersCommand(){
// How to ensure that a correct double is inserted?
}
我尝试将双精度数转换为带有“.”的字符串。作为分隔符并检查 string.IsNullOrEmpty()
,但这并没有导致成功。如果用户输入了有效的双精度值,我该如何正确检查?
由于 C# 是一种强类型编程语言,double
属性 例如 MyDoubleValue
只能设置为有效的 double
值。它永远不能设置为其他内容,例如 string
.
(仅)如果将 属性 的类型更改为 string
,则可以使用 double.TryParse
方法确定是否提供了有效值:
private string _myDoubleValue;
public string MyDoubleValue
{
get { return _myDoubleValue; }
set { SetProperty(ref _myDoubleValue, value); }
}
bool CanExecuteSaveParametersCommand()
{
return double.TryParse(_myDoubleValue, out var doubleValue);
}