Команда CanExecute для null integer [duplicate]

Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

108
задан skaffman 13 December 2009 в 15:58
поделиться

3 ответа

Я использую .NET 3.5 SP1, так что это очень просто:

<TextBox Text="{Binding Price, TargetNullValue=''}"/>

Что означает (спасибо Грегор за ваш комментарий):

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

sys is импортированное пространство имен xml для System в mscorlib:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

Надеюсь, что это помогло.

207
ответ дан Scott Munro 5 September 2018 в 07:12
поделиться

Этот преобразователь значений должен выполнить трюк:

public class StringToNullableDecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
        CultureInfo culture)
    {
        decimal? d = (decimal?)value;
        if (d.HasValue)
            return d.Value.ToString(culture);
        else
            return String.Empty;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        string s = (string)value;
        if (String.IsNullOrEmpty(s))
            return null;
        else
            return (decimal?)decimal.Parse(s, culture);
    }
}

Объявить экземпляр этого конвертера в ressources:

<Window.Resources>
    <local:StringToNullableDecimalConverter x:Key="nullDecimalConv"/>
</Window.Resources>

И использовать его в вашей привязке:

<TextBox Text="{Binding Price, Converter={StaticResource nullDecimalConv}}"/>

Обратите внимание, что TargetNullValue здесь не подходит: он используется для определения того, какое значение должно использоваться, когда source привязки имеет значение null. Здесь Price не является источником, это свойство источника ...

11
ответ дан bargz 5 September 2018 в 07:12
поделиться

Вы можете попробовать использовать ValueConverter (IValueConverter) http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

] В задней части моей головы здесь что-то вроде:

public class DoubleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        return (double)value;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
    var doubleValue = Convert.ToDouble(value);

    return (doubleValue == 0 ? null : doubleValue);
    }
}

(Возможно, нужно немного подстроить)

5
ответ дан Shimmy 5 September 2018 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: