0

对于此示例,我使用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(),但这并没有导致成功。如何正确检查用户是否输入了有效的双精度值?

4

1 回答 1

1

由于 C# 是一种强类型编程语言,因此只能将double诸如此类的属性设置为有效值。它永远不能设置为其他东西,例如 a 。MyDoubleValuedoublestring

(仅限)如果将属性的类型更改为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);
}
于 2022-02-14T13:40:54.950 回答