Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:
SqlConnection connection = null;
connection.Open();
Это вызовет ошибку, потому что, пока я объявил переменную «connection
», она не указала ни на что. Когда я пытаюсь вызвать член «Open
», для его устранения нет ссылки, и он будет вызывать ошибку.
Чтобы избежать этой ошибки:
object == null
. Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.
Похоже, вы используете только одно значение внутри конвертера, и вы просто делаете простой переключатель между двумя значениями, поэтому вместо этого вы можете просто сделать это прямо в XAML с помощью триггера. Этот метод также переключается на свойство Binding to the Invoice, так что любые уведомления об изменениях для этого свойства вызовут Trigger для обновления.
<HierarchicalDataTemplate >
<StackPanel Orientation="Horizontal" Margin="3">
<Image x:Name="invoiceImage" Width="16" Height="16" Margin="5,0,5,0" Source="good.png"/>
<TextBlock ... />
</StackPanel>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Invoice}" Value="{x:Null}">
<Setter TargetName="invoiceImage" Property="Source" Value="warning.png"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
Предполагая, что вы не можете использовать INotifyPropertyChanged, потому что вы привязываетесь ко всему объекту, вам нужно вызвать BindingExpression.UpdateTarget .
. Небольшая тонкость находится в процессе захвата связывающее выражение. Это требует от вас достаточно глубокого знания представления: насколько я знаю, единственный способ сделать это - вызвать BindingOperations.GetBindingExpression , передав элемент управления и свойство, привязка которого вы хотите обновить , например:
BindingOperations.GetBindingExpression(myImage, Image.SourceProperty).UpdateTarget();