シナリオ: 2 つのユーザー コントロール (foo.ascx と fum.ascx)
foo には、fum からプロパティにアクセスしたいメソッドがあります。彼らは同じページに住んでいますが、この種のコミュニケーションを達成するための非常に簡単な方法を見つけることができません.
何か案は?
OnMyPropertyValueChanged
fum.ascxにイベントを追加します。これを処理する方法はいくつかありますが、できるだけ分離されたソリューションが最適です。
最も分離されたメソッドは、必要なコントロールを見つけて参照を返すまでコントロール オブジェクト モデルをたどる再帰的な findControl メソッドです。
private Control findControl(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = findControl(c, id);
if (t != null)
{
return t;
}
}
return null;
}
これは、私がそれを使用するかどうかはわかりませんが、ちょっときちんとした別のアプローチです.(やや疑似コード):
public FunkyUserControl : UserControl
{
private List<UserControl> subscribedControls;
public List<UserControl> Subscribers
{
get { return subscribedControls;}
}
public void SubscribeTo(UserControl control)
{
subscribedControls.Add(control);
}
}
FunkyUserControl から 2 つのユーザー コントロールを継承し、メイン ページ クラスで次のことができます。
webControl1.SubscribeTo(webControl2);
webControl2.SubscribeTo(webControl1);
これで、各コントロールはサブスクライバー コレクションをイントロスペクトして、他のコントロールを見つけることができます。
最も簡単な解決策は、fum が HttpContext.Current.Items[] に値を格納し、そこから foo が後で読み取ることができるようにすることです。
より堅牢なオプションは、ページが fum への参照を設定できるプロパティを foo に与えることです。
イベントはより手間がかかりますが、構造的に優れています。
フォームに接続されている UserControl にイベントを追加します。