我正在尝试使用数据绑定来更改某些ListView元素的颜色。 例如,我有一个问题列表。
我需要强调已经回答的问题
我需要在用户做出选择后立即突出显示已回答的问题。 有我的列表项DataTemplate:
<DataTemplate x:Key="QuestionListDataTemplate">
<Border Padding="5" BorderThickness="2" BorderBrush="Gray" Background="Transparent">
<TextBlock FontSize="24"
x:Name="QuestionListDataTemplateText"
Foreground="{Binding Color}">
<Run x:Uid="QuestionsPage/QuestionNumber"/>
<Run Text="{Binding QuestionNumber}"/>
</TextBlock>
</Border>
</DataTemplate>
有Question
型号:
public class Question : TemplateQuestion
{
public string PollId { get; set; }
public string SelectedAnswerId { get; set; }
public string UserName { get; set; }
[Ignore]
public SolidColorBrush Color { get; set; }
[Ignore]
public bool Answered { get; set; }
[Ignore]
public List<Answer> Answers { get; set; }
[Ignore]
public int QuestionNumber { get; set; }
}
我还尝试使用DataTemplateSelector
和IValueConverter
更改颜色,但它不起作用。
有没有办法有选择地改变ListView
项的风格?
答案 0 :(得分:2)
我有办法做到这一点。
你应该让问题继承INotifyPropertyChanged,它可以在属性改变时通知xaml。
对于你不能使用转换,这是Xaml不知道属性更新。我写下面的代码。
public class Question : TemplateQuestion, INotifyPropertyChanged
{
public string PollId { get; set; }
public string SelectedAnswerId { get; set; }
public string UserName { get; set; }
public SolidColorBrush Color
{
get { return _color; }
set
{
_color = value;
OnPropertyChanged();
}
}
public bool Answered { get; set; }
public List<Answer> Answers { get; set; }
public int QuestionNumber { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private SolidColorBrush _color;
}