代码之家  ›  专栏  ›  技术社区  ›  Traci

清除文本框不会将绑定设置为null

  •  6
  • Traci  · 技术社区  · 15 年前

    XAML

    <y:TextBox Text="{Binding Year1Cost, Mode=TwoWay,  
         UpdateSourceTrigger=PropertyChanged,   
         NotifyOnValidationError=True,   
         ValidatesOnDataErrors=True,   
         ValidatesOnExceptions=True,  
         StringFormat=\{0:c\}}" Grid.Row="3" Grid.Column="1" />
    

    当我在其中输入任何值时,绑定是正常的,输入的值被传递
    当我不使用null值时,传递null
    如果我从文本框中删除该值,则传递的值是文本框的原始值,并且用户界面不会收到更改通知 Grrrrrrrrrrrrrrrr

    我花了很长时间查看选项 除了将代码放在每个可空字段的ContextChanged后面,我看不出这样做的效率。

    ps.已查看TargetNullValue,但未获得成功

    3 回复  |  直到 15 年前
        1
  •  4
  •   itowlson    15 年前

    考虑使用 value converter . 您应该能够实现ConvertBack方法将空字符串转换为null。

        2
  •  15
  •   Shimmy Weitzhandler 500 - Internal Server Error    15 年前

    设置属性 TargetNullValue String.Empty :

    <TextBox Text="{Binding TargetNullValue={x:Static sys:String.Empty}}"/>
    

    如果我没有错(如果我错了,请原谅),您应该如下设置属性StringFormat:

    StringFormat={}{0:C}
    

    这甚至可能是您得到异常的原因。

        3
  •  3
  •   akjoshi HCP    12 年前

    这是 a link

    public class NullableConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
           return value == null ? string.Empty : String.Format(culture, "{0}", value);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
           return string.IsNullOrEmpty(String.Format(culture, "{0}", value)) ? null : value;
        }
    }