无法为可为Null的Int32分配Null值?通过绑定

本文关键字:Null 绑定 Int32 分配 | 更新日期: 2023-09-27 18:21:38

无法通过TextBox绑定将null值分配给Int32?。如果TextBox为空,则不调用Int32Null集
TexBox周围有一个红色边框,表示存在验证异常。

这对Int32来说毫无意义?可以为null。如果用户从TextBox中删除整数值,我希望调用Set,以便将属性分配为null。

当它启动int32Null=null并且TextBox不是红色时。

我尝试实现Validation,并在TextBox为空的情况下设置Validation=true。但是Set仍然没有被调用,并且TextBox为红色,表示存在验证错误。

似乎我应该能够通过绑定将null值分配给可为null的值。

    <Window x:Class="AssignNull.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
            DataContext="{Binding RelativeSource={RelativeSource self}}"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBox Grid.Row="0" Grid.Column="0" Text="{Binding Path=Int32Null, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
            <TextBox Grid.Row="2" Grid.Column="0" Text="{Binding Path=StringNull, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
        </Grid>
    </Window>
    public partial class MainWindow : Window
    {
        private Int32? int32Null = null;
        private string stringNull = "stringNull";
        public MainWindow()
        {
            InitializeComponent();
        }
        public Int32? Int32Null
        {
            get { return int32Null; }
            set { int32Null = value; }
        }
        public string StringNull
        {
            get { return stringNull; }
            set { stringNull = value; }
        }
    } 

Set StringNull确实被调用,并且传递的值不是null,而是string.nempty。

由于Set没有在Int32Null上调用,我不知道传递了什么。

它还向Int32?传递了一个字符串。empty?。必须将空字符串转换为null。

    [ValueConversion(typeof(Int32?), typeof(String))]
    public class Int32nullConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Int32? int32null = (Int32?)value;
            return int32null.ToString();
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string strValue = value as string;
            if(string.IsNullOrEmpty(strValue.Trim())) return null;
            Int32 int32;
            if (Int32.TryParse(strValue, out int32))
            {
                return int32;
            }
            return DependencyProperty.UnsetValue;
        }
    }

无法为可为Null的Int32分配Null值?通过绑定

您对类型转换器应该如何处理这一问题做出了错误的假设。因此,如果他们没有按照你的意愿,即将一个空字符串转换为null,你要么必须编写自己的字符串,要么使用为你进行转换的Binding.Converter