2016-04-29 22 views
0

以下のコードのようにコンボボックスがあります。私はそれを選択すると、メッセージボックスに選択の名前を表示したいと思います。私は何をしようとしていることである -コンボボックスから選択したアイテム名を取得

<dxb:BarEditItem.EditTemplate> 
<DataTemplate> 
    <dxe:ComboBoxEdit x:Name="PART_Editor" 
         SelectedIndexChanged="OnSelectedIndexChanged" Name="comboBox"> 
     <dxe:ComboBoxEdit.Items> 
      <system:String>Item1</system:String> 
      <system:String>Item2</system:String> 
     </dxe:ComboBoxEdit.Items> 
    </dxe:ComboBoxEdit> 
</DataTemplate> 

はどのようにして、メッセージボックス内の選択した名前を取得するためのバックエンドのコードを追加することができますか?

答えて

2

これはSelectedIndexChangedイベントで処理することを意味しますか?もしそうなら、イベントを引き起こしたコンボボックスを手に入れることができます。

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e) 
{ 
    ComboBox cb = (ComboBox)sender; 
    string selectedText = cb.SelectedText; 
    //Code to display the selectedText into a message box 
} 
+1

あなたはSystem.Windows.Forms.ComboBox' 'を考えています。 OPは、DevExpress WPF controlsスイートからの 'ComboBoxEdit'を使用しています。 – Grx70

1

私はあなたが「選択の名前」で何を意味するかわからないので、私はあなたが選択した項目を表しコンボに表示されるテキストのホールドを取得したいと仮定しています。

あなたの手の中にコンボ自体たら:

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e) 
{ 
    var combo = (ComboBoxEdit)sender; 
    (...) 
} 

をあなたはいくつかのオプションがあります。最も信頼性の高いもの(DisplayMemberプロパティ、DisplayTextConverterプロパティ、CustomDisplayTextイベントを考慮して)コンボに表示されるべき実際のテキストを保持する読み取り専用プロパティであるcombo.DisplayTextプロパティを使用するのが最も信頼できるものです。

別のオプション(特定のケースで)は(string)combo.SelectedItemです。ただし、combo.SelectedItemは実際に選択された項目を返し、テキスト表現ではありません。アイテムがタイプstringである限り、上記は問題ありません。そうでない場合はInvalidCastExceptionが得られます。また、この場合、の内容は、と表示されない場合があります(前の段落で述べたように、表示されたテキストを変更する方法はいくつかあります)。

さらに別のオプションはであり、DisplayMemberを考慮するが、DisplayTextConverterでもCustomDisplayTextでもない。

EDIT

は、一度にSelectedIndexChangedを上げて、DisplayTextプロパティはまだ(特に驚くべきことではありません)、新たに選択した項目を反映するように更新されていないことが判明します。それに対処するには、DisplayText値の取得を延期する必要があります。私は個人的に(コンボに関連付けられているDispatcherを使用して)これらの線に沿って何かでいいと思う:

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e) 
{ 
    var combo = (ComboBoxEdit)sender; 
    combo.Dispatcher.BeginInvoke(new Action(() => 
    { 
     var text = combo.DisplayText; 
     (...) 
    })); 
} 
関連する問題