Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.
Иногда вы можете просто забыть инициализировать .
Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.
Я использую .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"
Надеюсь, что это помогло.
Этот преобразователь значений должен выполнить трюк:
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
не является источником, это свойство источника ...
Вы можете попробовать использовать 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);
}
}
(Возможно, нужно немного подстроить)