我有这个XAML:
<ListView Name="NameListView"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Grid.Column="1">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.DisplayMemberBinding>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="First" />
<Binding Path="Last" />
</MultiBinding>
</GridViewColumn.DisplayMemberBinding>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
和ObservableCollection<Name>
在我的代码隐藏中绑定到ListView的名称“names”。将新名称添加到集合时,我希望ListView更改新添加名称的背景颜色。我该怎么做呢?
答案 0 :(得分:15)
您可以在listbox.Items属性上订阅ItemsChanged事件。这有点棘手,因为你必须先抛出它。订阅的代码如下所示:
((INotifyCollectionChanged)MainListBox.Items).CollectionChanged += ListBox_CollectionChanged;
然后在那个活动中,您可以使用以下代码访问您的项目:
private void ListBox_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems.Count > 0)
{
Dispatcher.BeginInvoke(() =>
{
var newListItem = MainListBox.ItemContainerGenerator.ContainerFromItem(e.NewItems[0]) as Control;
if (newListItem != null)
{
newListItem.Background = System.Windows.Media.Brushes.Red;
}
}, DispatcherPriority.SystemIdle);
}
}
答案 1 :(得分:1)
直接设置ListViewItem的背景并不是一个好主意,因为默认情况下ListView正在虚拟化(这很好),这意味着当滚动到视图外时,构成项目的控件将被处理掉。最简单的方法是,我可以想到在数据对象中有一个属性,表示New-state,然后就可以触发它。
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsNew}" Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
如果您不再将其视为新值,则可以使用任何想要将该值设置为false的逻辑。