Event fired when item is added to ListView?

后端 未结 2 411
一向
一向 2021-01-13 08:21

I have this XAML:



        
相关标签:
2条回答
  • 2021-01-13 09:00

    Setting the background of a ListViewItem directly is not a good idea because by default a ListView is virtualizing (which is good), that means the controls that make up the items get disposed when scrolled out of view. The easiest way to do this is that i can think of is having a property in your data-object which indicates the New-state, then you can trigger on it.

    <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>
    

    You then can use any logic you want to set that value to false again if you do not consider it new anymore.

    0 讨论(0)
  • 2021-01-13 09:13

    You can subscribe to the ItemsChanged event on your listbox.Items property. This is a little tricky because you have to cast it first. The code to subscribe would look like this:

    ((INotifyCollectionChanged)MainListBox.Items).CollectionChanged +=  ListBox_CollectionChanged;
    

    And then inside that event you can get to your item with code like this:

    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);
            }
        }
    
    0 讨论(0)
提交回复
热议问题