Windows 7 Phone(Silverlightプラットフォーム)では、ListBoxが作成されると、そのListBoxの名前が指定され、同じ名前の変数に割り当てられます。
<ListBox Name="abcFeed" ...
として使用されます:
abcFeed.ItemsSource = feed.Items;
私のアプリには多くのフィードがあり、それらをそれぞれのリストボックスに割り当てたいと思っています。文字列の辞書にリストボックスの名前があります。
this.feeds["abcFeed"] = "http://feed.abc.com/....";
this.feeds["nbcFeed"] = "http://feed.nbc.com/....";
しかし、スイッチを使用してフィードをリストボックスに割り当てる以外に、辞書からリストボックスの文字列名を取得し、ループ内でインスタンスを動的に呼び出したいと考えていました。
たとえば、次の代わりに:
feedName = "nbcFeed";
// Bind the list of SyndicationItems to our ListBox.
switch (feedName)
{
case "abcFeed":
abcFeed.ItemsSource = feed.Items;
break;
case "nbcFeed":
nbcFeed.ItemsSource = feed.Items;
break;
}
どういうわけか辞書のキーを取り、インスタンス化された変数名を次のように呼び出したいと思います。
feedName = "nbcFeed";
// nbcFeed.ItemsSource = feed.Items;
((ListBox) feedName).ItemsSource = feed.Items;
Reflection、Assembly、およびActivator.CreateInstance()を調べましたが(私はすでにインスタンスを持っています)、これが可能かどうかを明確に理解していません。
これを行うことはできますか、それとも私はスイッチで立ち往生していますか?
私も試しました:
this.GetType().GetProperty(feedName).ItemsSource = feed.Items;
しかし、エラーが発生します:
デリゲート型ではないため、ラムダ式を型'System.Delegate'に変換できません