You could create an event in the WindowItem that gets raised when the Image/Label are changed. From there you'd just have the cloned controls listen to the event and update on the call.
Something along the lines of: Create the event:
public delegate void DataUpdatedEvent(Image newimage, string newlabel);
public event DataUpdatedEvent DataUpdated;
Create a notification method, which you'd put a call to whenever Image or Label are changed:
private void NotifyDataChanged()
{
if (DataUpdated != null) DataUpdated(this.Image, this.Label);
}
Plus a method for the cloned controls to call when the event is raised:
public void UpdateData(Image newimage, string newlabel)
{
this.Image = newimage;
this.Label = newlabel;
}
Then as you create the clones, have them listen in:
foreach (WindowItem wi in listView1.SelectedItems)
{
WindowItem newWi = wi.Clone();
wi.DataUpdated += new WindowItem.DataUpdatedEvent(newWi.UpdateData);
listView2.Items.Add(newWi);
}