如何为 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);
}