如何链接来自不同列表的项目

时间:2013-10-05 09:53:59

标签: c# listview user-controls listviewitem

我有4 ListView s 第一个ListView是主要的。它包含自定义用户控件 - 每个UserControl都有ImageLabel

您可以使用以下代码将主ListView中的项添加到任何其他3个ListView:

foreach (WindowItem wi in listView1.SelectedItems)
{
    listView2.Items.Add(wi.Clone());
}

Custom UserControl具有以下功能:

public WindowItem Clone()
{
    return new WindowItem(window);
}

它的作用是根据原始内容返回新的UserControl。

我想以某种方式链接它们,所以如果我更新orignial项的Image / Label,它还会更新其他ListView s中的类似项

现在,我正在做的是当我需要更新其他项目时,我使用循环检查项目是否与更新的项目匹配,如果他们这样做,我也会更新它们 - 我希望/相信有更好的方法...

1 个答案:

答案 0 :(得分:1)

您可以在WindowItem中创建一个在更改图像/标签时引发的事件。 从那里你只需要克隆的控件来监听事件并更新通话。

以下内容: 创建活动:

public delegate void DataUpdatedEvent(Image newimage, string newlabel);
public event DataUpdatedEvent DataUpdated;

创建一个通知方法,只要更改了图像或标签,就会调用该方法:

private void NotifyDataChanged()
{ 
     if (DataUpdated != null) DataUpdated(this.Image, this.Label);
}

另外还有一个方法,用于克隆控件在引发事件时调用:

public void UpdateData(Image newimage, string newlabel)
{
    this.Image = newimage;
    this.Label = newlabel;
}

然后在创建克隆时,请让他们收听:

foreach (WindowItem wi in listView1.SelectedItems)
{
    WindowItem newWi = wi.Clone();
    wi.DataUpdated += new WindowItem.DataUpdatedEvent(newWi.UpdateData);
    listView2.Items.Add(newWi);
}