WPF: запускать запуск данных, когда значение строки равно нулю или строке. - PullRequest
1 голос
/ 23 апреля 2011

Я создал DataTemplate

<DataTemplate DataType="{x:Type model:Person}">
  <StackPanel>
    <!-- Text box is binding to the person's Image property. -->
    <TextBlock Text="{Binding Image}" />
    <Border>
      <Border.Style>
        <Style TargetType="Border">
          <Style.Triggers>
            <!-- Data trigger is binding to the same Image property. -->
            <DataTrigger Binding="{Binding Image}" Value="{x:Null}">
              <Setter Property="Background">
                <Setter.Value>
                  <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Color="#696969" Offset="0.0" />
                    <GradientStop Color="#2E2E2E" Offset="1.0" />
                  </LinearGradientBrush>
                </Setter.Value>
              </Setter>
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </Border.Style>
    </Border>
  </StackPanel>
</DataTemplate>

Класс Person выглядит следующим образом:

public class Person
{
    public string Image { get; set; }
}

Представленный триггер данных в шаблоне данных не работает должным образом. Независимо от того, предоставлю я значение для свойства Image или нет, оно просто не будет рисовать фон кисти с линейным градиентом. С другой стороны, текстовый блок показывает содержимое свойства Image, как и должно быть.

Я подумал, что, возможно, когда person.Image = null;, тогда XAML фактически читает его как person.Image = string.Empty;, но я попытался заменить Value="{x:Null}" на Value="", и он все еще не работает.

Помогите пожалуйста, спасибо.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2011

Привязка правильная, но вы ничего не видите, потому что ваш Border равен 0 × 0 px.Вы можете получить желаемый эффект следующим образом:

<Border Width="50">
    <TextBlock Text="{Binding Image}" />
    <!-- your style unchanged -->
</Border>
0 голосов
/ 06 января 2012

Как предложил AbdouMoumen, внедрите INotifyPropertyChanged в своем классе Person.

public class Person : INotifyPropertyChanged
{
    private string _image;
    public string Image
    {
        get { return _image; }
        set
        {
            _image = value;
            NotifyPropertyChanged("Image");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

Тогда только настройка person.Image = null повлияет на ваш xaml.

0 голосов
/ 23 апреля 2011

Попробуйте реализовать Уведомление об изменении в своем классе Person. Это может быть причиной вашей проблемы.

...