Rerun ValueConverter в событии [дубликат]

Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:

SqlConnection connection = null;
connection.Open();

Это вызовет ошибку, потому что, пока я объявил переменную «connection», она не указала ни на что. Когда я пытаюсь вызвать член «Open», для его устранения нет ссылки, и он будет вызывать ошибку.

Чтобы избежать этой ошибки:

  1. Всегда инициализируйте свои объекты, прежде чем пытаться что-либо с ними делать.
  2. Если вы не уверены, что объект имеет значение null, проверьте его с помощью object == null.

Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.

3
задан Hadi Eskandari 18 March 2010 в 12:29
поделиться

2 ответа

Похоже, вы используете только одно значение внутри конвертера, и вы просто делаете простой переключатель между двумя значениями, поэтому вместо этого вы можете просто сделать это прямо в 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>
3
ответ дан John Bowen 29 August 2018 в 01:03
поделиться

Предполагая, что вы не можете использовать INotifyPropertyChanged, потому что вы привязываетесь ко всему объекту, вам нужно вызвать BindingExpression.UpdateTarget .

. Небольшая тонкость находится в процессе захвата связывающее выражение. Это требует от вас достаточно глубокого знания представления: насколько я знаю, единственный способ сделать это - вызвать BindingOperations.GetBindingExpression , передав элемент управления и свойство, привязка которого вы хотите обновить , например:

BindingOperations.GetBindingExpression(myImage, Image.SourceProperty).UpdateTarget();
3
ответ дан itowlson 29 August 2018 в 01:03
поделиться
  • 1
    Это еще немного сложно сделать даже в пользовательском интерфейсе. связанный элемент - TreeView, и я хочу обновить изображение на 2-м уровне. Я добавил код пользовательского интерфейса выше. – Hadi Eskandari 18 March 2010 в 12:27
Другие вопросы по тегам:

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