Reputation:
I have a List in my custom user control. I'd like the control to redraw the each Image in the List whenever the contents of that list is changed. Either a movement, addition or removal of an items should fire an event.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WebServiceScanner
{
public partial class imageList : UserControl
{
public imageList()
{
InitializeComponent();
}
public List<Image> Images { get; set; }
public void AddImage(Image image)
{
Images.Add(image);
}
public void RemoveImage(Image image)
{
Images.Remove(image);
}
public void MoveImageLeft(int index)
{
Image tmpImage = Images[index];
Images[index] = Images[index - 1];
Images[index - 1] = tmpImage;
}
public void MoveImageLeft(int index)
{
Image tmpImage = Images[index];
Images[index] = Images[index + 1];
Images[index + 1] = tmpImage;
}
}
}
Can this be done?
Thanks for your guidance! Eager to learn!
Upvotes: 1
Views: 139
Reputation: 1086
You could also try using the BindingList. The differences are discussed in here: https://stackoverflow.com/questions/4284663/...
Upvotes: 0
Reputation: 5358
public partial class imageList : UserControl
{
public event OnChange;
public imageList()
{
InitializeComponent();
}
public List<Image> Images { get; set; }
public void AddImage(Image image)
{
Images.Add(image);
this.OnChange();
}
public void RemoveImage(Image image)
{
Images.Remove(image);
this.OnChange();
}
public void MoveImageLeft(int index)
{
Image tmpImage = Images[index];
Images[index] = Images[index - 1];
Images[index - 1] = tmpImage;
this.OnChange();
}
public void MoveImageLeft(int index)
{
Image tmpImage = Images[index];
Images[index] = Images[index + 1];
Images[index + 1] = tmpImage;
this.OnChange();
}
}
Upvotes: 0
Reputation: 262939
You can use an ObservableCollection<T>
instead of a List<T>
and handle its CollectionChanged event.
Upvotes: 4