Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理空数值绑定_C#_Wpf_Data Binding - Fatal编程技术网

C# 处理空数值绑定

C# 处理空数值绑定,c#,wpf,data-binding,C#,Wpf,Data Binding,我的视图模型中有一个WPF应用程序,其int属性如下所示: private int _port; public int Port { get { return _port; } set { SetProperty(ref _port, value); } } <TextBox Text="{Binding Port, UpdateSourceTrigger=PropertyChanged}" /> 我的观点是这样的: private int _port; publ

我的视图模型中有一个WPF应用程序,其int属性如下所示:

private int _port;
public int Port
{
    get { return _port; }
    set { SetProperty(ref _port, value); }
}
<TextBox Text="{Binding Port, UpdateSourceTrigger=PropertyChanged}" />
我的观点是这样的:

private int _port;
public int Port
{
    get { return _port; }
    set { SetProperty(ref _port, value); }
}
<TextBox Text="{Binding Port, UpdateSourceTrigger=PropertyChanged}" />
我的问题是,每当用户清除文本框文本时,就会出现以下错误:

无法转换值

这会导致绑定不更新属性,因此我为命令CanExecute逻辑设置的任何规则都不适用。 有没有办法在不将属性类型更改为Nullable的情况下重写此行为

更新
我尝试过使用或转换器,但这2将值更改为一些预定义的默认值,这在我的情况下不适用。

其中一种方法是使用控件,用于处理数字,如:


另一种方法是写入以在绑定中使用。

其中一种方法是使用控件,用于处理数字,如:

另一种方法是写入以在绑定中使用。

尝试以下方法:

public int Port
{
    get { return _port; }
    set { SetProperty(ref _port, string.IsNullOrWhitespace(value.ToString())?0 :value); 
}
试试这个:

public int Port
{
    get { return _port; }
    set { SetProperty(ref _port, string.IsNullOrWhitespace(value.ToString())?0 :value); 
}

您可以尝试使用绑定的fallback值

像这样的工作:

<TextBox Text="{Binding Port, FallBackValue="0", UpdateSourceTrigger=PropertyChanged}" />

这是假设您希望值为空时为零。

您可以尝试使用绑定的回退值

像这样的工作:

<TextBox Text="{Binding Port, FallBackValue="0", UpdateSourceTrigger=PropertyChanged}" />

假设您希望值为空时为零。

您尝试过转换器吗? 它可以让你用这个值做任何你想做的事情,当它被清除时,你可以将它设置为你选择的默认值

这里有一个例子:

要使用上述转换器,请在Xaml中使用:

<TextBox Text="{Binding Port, 
                UpdateSourceTrigger=PropertyChanged}",
                Converter={StaticResource IntConverter }}" 
/>

你试过转换器吗? 它可以让你用这个值做任何你想做的事情,当它被清除时,你可以将它设置为你选择的默认值

这里有一个例子:

要使用上述转换器,请在Xaml中使用:

<TextBox Text="{Binding Port, 
                UpdateSourceTrigger=PropertyChanged}",
                Converter={StaticResource IntConverter }}" 
/>

当文本框被清除时,该值将为空或null,因此在中,您需要在解析诸如string.IsNullOrWhitespacevalue.ToString之类的值之前进行检查?0 :value@Jegan:OP应将此检查置于何处?请注意:当清除文本框时,值将为空或null,因此在中,您需要在解析string.IsNullOrWhitespacevalue.ToString等值之前进行检查?0 :value@Jegan:OP应将此检查放在何处?请看:string.IsNullOrWhitespacevalue.ToString没有多大意义。因为int是一种值类型,并且总是有一些值,所以ToString从不返回null或string.Empty。此外,当绑定转换失败时,绑定引擎不会调用属性setter.string.IsNullOrWhitespacevalue.ToString没有多大意义。因为int是一种值类型,并且总是有一些值,所以ToString从不返回null或string.Empty。此外,当绑定转换失败时,绑定引擎不会调用属性setter。请注意,该类型为int,因此您应该执行FallBackValue=0。当应用@M.kazemAkhgary建议的内容时,也不会更改结果。您可能还需要将其与TargetNullValue组合以使其工作。请尝试TargetNullValue={x:Static sys:String.Empty}仍然相同。我猜TargetNullValue没有任何效果,因为我的属性不可为Null请注意,类型为int,因此您应该执行FallBackValue=0。在应用@M.kazemAkhgary建议的内容时,这不会改变结果。您可能还需要将其与TargetNullValue组合以使其工作。请尝试TargetNullValue={x:Static sys:String.Empty}仍然相同。我猜TargetNullValue没有效果,因为我的属性不可为null