C# 将TextBox绑定到可为空的Double?

C# 将TextBox绑定到可为空的Double?,c#,wpf,C#,Wpf,我想绑一个双人包?对于文本框,我有一个问题,因为当用户清空文本框时,会发生验证。 我认为我的应用程序在某个我找不到的地方进行了验证,所以我创建了一个快速应用程序进行测试 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new ViewModel() {Value = 3, Value2 = nu

我想绑一个双人包?对于文本框,我有一个问题,因为当用户清空文本框时,会发生验证。 我认为我的应用程序在某个我找不到的地方进行了验证,所以我创建了一个快速应用程序进行测试

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; }
}
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>

双重:
双份?:
当我运行应用程序时,绑定到Value2的文本框为空,但如果我键入一个值,然后将其删除,当文本框失去焦点时,将显示一个错误。只有当我键入一个值时,它才会消失

我发现他建议使用字符串,但他最初使用的是双精度,而不是双精度?

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

我觉得奇怪的是,绑定到double?不允许我设置空值。

首先

不是这个:

<TextBox Width="50px"

您确定没有键入无法解析为
双精度
,例如单词的值吗?您提到的“错误”可能只是告诉您不能在数字属性中输入文本。我只是将文本框留空,Eugene suggestion有意义并解决了这个问题。请注意,input other then double不会通过您的viewmodel进入,因此您的viewmodel仍然具有“右”旧的双值敏感点。但这已经取决于验证技术:)所有用户输入都必须进行确认。@blindmeis是的,现在我必须添加一些特殊的验证程序。谢谢@eugene这种情况的问题是,例如,IErrorDataInfo验证永远不会有机会验证输入,因为“ABC”输入不会发送到viewmodel。但你是对的,用户输入必须被验证或“禁止”(十进制输入行为):@eugene真棒!!!这非常有效,为我节省了一堆变通代码。谢谢你的精彩回答TargetNullValue“太棒了!!
<TextBox Width="50"
 <TextBox Width="50px" Text="{Binding Value2}"></TextBox>
<TextBox Width="50" Text="{Binding Value2, TargetNullValue=''}"></TextBox>