我创建了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=""
,但它仍然没有工作。
请帮助,谢谢。
答案 0 :(得分:0)
尝试在Person类上实现更改通知。这可能是你问题的原因。
答案 1 :(得分:0)
绑定是正确的,但由于Border
为0×0 px,因此您看不到任何内容。你可以得到这样的效果:
<Border Width="50">
<TextBlock Text="{Binding Image}" />
<!-- your style unchanged -->
</Border>
答案 2 :(得分:0)
正如AbdouMoumen建议的那样,在你的Person类上实现INotifyPropertyChanged。
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产生影响。