C# 处理空数值绑定
我的视图模型中有一个WPF应用程序,其int属性如下所示: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
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