0

4ListView秒あります。
最初のListView, がメインです。カスタム UserControls を保持します。それぞれUserControlImageと がありLabelます。

次のコードを使用して、メインの ListView から他の 3 つの ListView のいずれかに項目を追加できます。

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

カスタム UserControl には次の機能があります。

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

それが行うことは、オリジナルに基づいて新しい UserControl を返すことです。

どうにかリンクしたいので、元のアイテムのImage/を更新すると、他の s のLabel類似のアイテムも更新されますListView

現在、私が行っているのは、他のアイテムを更新する必要があるときです。ループを使用して、アイテムが更新されたアイテムと一致するかどうかを確認し、一致する場合はそれらも更新します-より良い方法があることを願っています/信じています...

4

1 に答える 1

1

Image/Label が変更されたときに発生する WindowItem にイベントを作成できます。そこから、複製されたコントロールがイベントをリッスンし、呼び出しで更新するだけです。

イベントの作成:

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

Image または Label が変更されるたびに呼び出す通知メソッドを作成します。

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);
}
于 2013-10-05T11:42:41.200 に答える