将TextBox绑定到Nullable Double?

Dzy*_*ann 10 c# wpf

我想绑定一个Double?到TextBox,我遇到了问题,因为当用户清空文本框时,会发生验证.我认为我的应用程序在我找不到的某个地方进行了验证,所以我创建了一个快速应用程序来测试.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel() {Value = 3, Value2 = null};
    }
}

public class ViewModel
{
    public double Value { get; set; }
    public double? Value2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

xaml

    <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="5" Height="20px">
        <TextBlock Margin="0,0,5,0">Double:</TextBlock>
        <TextBox Width="50px" Text="{Binding Value}"></TextBox>
    </StackPanel>
    <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="5" Height="20px">
        <TextBlock Margin="0,0,5,0">Double?:</TextBlock>
        <TextBox Width="50px" Text="{Binding Value2}"></TextBox>
    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时绑定到Value2的TextBox为空,但如果我键入一个值然后删除它,当TextBox失去焦点时它会显示错误.它只会在我键入值时消失.

我发现这篇文章建议使用一个字符串,但他最初使用的是双倍而不是双倍?

我怎样才能做到这一点?是使用字符串的唯一方法吗?

绑定到双倍似乎很奇怪不允许我设置空值.

小智 17

首先.

不是这个:

<TextBox Width="50px"
Run Code Online (Sandbox Code Playgroud)

但是这个:

<TextBox Width="50"
Run Code Online (Sandbox Code Playgroud)

第二:如果你这样做,你的情况应该解决:

代替 :

 <TextBox Width="50px" Text="{Binding Value2}"></TextBox>
Run Code Online (Sandbox Code Playgroud)

做:

<TextBox Width="50" Text="{Binding Value2, TargetNullValue=''}"></TextBox>
Run Code Online (Sandbox Code Playgroud)

希望有所帮助