我想绑定一个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; }
}
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的TextBox为空,但如果我键入一个值然后将其删除,则当TextBox失去焦点时,它会显示错误。它只会在我输入值时消失。
我发现this post建议使用字符串,但他最初使用的是double而不是 double?
我该如何使这项工作?是使用字符串的唯一方法吗?
对我来说,绑定到 double?似乎不允许我设置空值。
答案 0 :(得分:13)
首先。
不是这个:
<TextBox Width="50px"
但是这个:
<TextBox Width="50"
第二:如果你这样做,你的情况应该解决:
而不是:
<TextBox Width="50px" Text="{Binding Value2}"></TextBox>
做:
<TextBox Width="50" Text="{Binding Value2, TargetNullValue=''}"></TextBox>
希望有所帮助