1

リストボックスとコンボボックスを備えたSilverlightページがあります...

ユーザーがリストボックスでクリックした内容に基づいて、ドロップダウンボックスにデータを入力します。完了したイベントは、リストボックスの各アイテムで同じです(アイテムには、「BaseTypes」、「Bays」、「Face」などが含まれます)

完成したメソッドをジェネリックにして、呼び出しごとに1つ持つ必要がないようにするにはどうすればよいですか?

private void lstEdits_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ServiceCylinderClient obj = new ServiceCylinderClient();
    obj.GetBaysCompleted += new EventHandler<GetBaysCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));

    string selectedItem = lstEdits.SelectedItem as string;

    switch selectedItem
    {
         case "BaseTypes":
           obj.GetBaseTypesCompleted += new EventHandler<GetBaseTypesCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));
           obj.getGetBaseTypesAsync();
           break;
        case "Bays":
           obj.GetBaysCompleted += new EventHandler<GetBaysCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));
           obj.getGetBaysAsync();
           break;
    }
}

現在のところ、呼び出しごとに「completedメソッド」が必要ですが、すべて同じことを行うため(リストボックスアイテムのソースを設定するだけです)、単純化するために汎用的にしたいと思います。 。

void GetBaseTypesCompleted(object sender, getBaseTypesCompletedEventArgs e)
{
    lstEdits.ItemsSource = e.Result;
}

void GetBaysCompleted(object sender, getBaysCompletedEventArgs e)
{
    lstEdits.ItemsSource = e.Result;
}

前もって感謝します!

4

2 に答える 2

1

「Result」を公開する基本タイプからすべてが取得されるわけではないため、「CompletedEventArgs」から「Result」プロパティを読み取るには、リフレクションを使用する必要があると思います。

次のようなことができるはずです。

lstEdits.ItemsSource = (IEnumerable)e.GetType().GetProperty("Result").GetValue(e, null);
于 2012-08-28T22:56:16.010 に答える
0

すべてのcompletedメソッドには異なる結果の異なるEventArgsがあるため、この問題の簡単な解決策はないと思います。

于 2012-08-29T09:39:00.740 に答える