Virus
Virus

Reputation: 3415

Adding\Removing from ListView but not reflecting in UI

I have two List<ColumnClass>. one for left side listview and another for right side list view. these listviews are in a pop up box. I am modifying the List of both the Listviews and again assigning that to the Listview's ItemsSource. But this doesn't reflect in the UI immediatly. When I close the popup and open again it reflects the changes. What am I missing?

Upvotes: 1

Views: 79

Answers (2)

sa_ddam213
sa_ddam213

Reputation: 43596

You should replace the List<T> with ObservableCollection<T>, ObservableCollections will update your ListView whenever an Item is removed, If you are just modifing properties your ColumnClass make sure your ColumnClass implements INotifyPropertyChanged this will allow the UI to update when a property changes.

Example:

Code:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        MyColumns.Add(new ColumnClass { Name = "Column1" });
        MyColumns.Add(new ColumnClass { Name = "Column2" });
        MyColumns.Add(new ColumnClass { Name = "Column3" });
    }

    private ObservableCollection<ColumnClass> _myColumns = new ObservableCollection<ColumnClass>();
    public ObservableCollection<ColumnClass> MyColumns
    {
        get { return _myColumns; }
        set { _myColumns = value; }
    }
}

xaml:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WpfApplication8" Height="368" Width="486" Name="UI" >
    <Grid>
        <ListView ItemsSource="{Binding ElementName=UI, Path=MyColumns}" DisplayMemberPath="Name" />
    </Grid>
</Window>

Model:

public class ColumnClass : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; NotifyPropertyChanged("Name"); }
    }



    public event PropertyChangedEventHandler PropertyChanged;
    /// <summary>
    /// Notifies the property changed.
    /// </summary>
    /// <param name="property">The info.</param>
    public void NotifyPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}

Upvotes: 2

Tilak
Tilak

Reputation: 30698

You should change List<T> to ObservableCollection<T> or BindingList<T>.

Reason, List doesnot implement INotifyPropertyChanged.

Upvotes: 0

Related Questions