WPF DataBinding не обновляет свойство [дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
10
задан Tyrsius 19 August 2011 в 20:15
поделиться

3 ответа

Это обычное приоритет значения свойства зависимостей . Установка его на изображение находится на # 3, а в триггере стиля - более низкий приоритет # 6.

Вы можете сделать это вместо:

<Image Name="image1" Stretch="Uniform" Source="/Affinity;component/Images/affinity_logo.png">
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Visibility" Value="Hidden" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Items.Count, ElementName=tabcontrolworkspaces}"
                    Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>
19
ответ дан CodeNaked 27 August 2018 в 04:05
поделиться

Задайте свою видимость в стиле в дополнение к триггеру

. Я встречал это странное поведение с DataTriggers много раз, где иногда DataTrigger Setters не будут вступать в силу, если сеттер также не определен в Стиль.

Не работает

<Image Visibility="Collapsed">
    <Image.Style>
        <Style TargetType="Image">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Something}" Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    <Image.Style>
</Image>

Будет работать

<Image>
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Something}" Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    <Image.Style>
</Image>

Изменить: см. принятый ответ для объяснения причин, почему это не работает. Он связан с порядком, в котором определяются свойства зависимостей, где свойства, определенные в <Tag>, всегда имеют приоритет над запущенными значениями.

6
ответ дан Community 27 August 2018 в 04:05
поделиться

Когда триггер верен, он изменяет значение на желаемое значение. Когда он больше не верен, он возвращает значение предыдущему значению. Это не изменит его на значение, которое оно не будет.

Это означает, что если исходное значение будет видимым и вы измените его на видимое, когда триггер больше не активен, значение вернется назад к видимым.

0
ответ дан mydogisbox 27 August 2018 в 04:05
поделиться
Другие вопросы по тегам:

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