2016-11-10 10 views
0

ゴール私はコンボボックスをコンボボックスから選択したときにコンボボックスを閉じて(選択値として古い値を表示します)、OKでメッセージボックスを表示したい/キャンセルボタン。ユーザーが[OK]をクリックすると、選択した新しい値を設定して、それ以外の値を戻す必要があります。WPF:アイテムの選択と表示にコンボボックスを閉じます。メッセージボックス

問題私がアイテムを選択しているとき、メッセージボックスをComboboxと一緒に表示できますが、これは必要ありません。ユーザーが何かを選択するとすぐに、私はComboboxを閉じてMessageboxを表示したいと思います。

どうすればいいですか?

のXmaIコード

<ComboBox Name="Currency" Grid.Row="1" Grid.Column="5" ItemsSource="{Binding comboboxSource}" 
         SelectedValuePath="Value.bank_currency" IsReadOnly="False" IsTextSearchEnabled="True" TextSearch.TextPath="Value.bank_currency" 
         SelectedItem="{Binding SelectedBankCurrency, UpdateSourceTrigger=LostFocus,Mode=Twoway}"> 

C#コード

public KeyValuePair<string, bankCurrencyObject>? SelectedBankCurrency 
    { 
     get { return _selectedCurrency; } 
     set 
     { 
       MessageBoxResult result = MessageBox.Show("Are you sure you want to change the currency?", 
         "Warning", 
         MessageBoxButton.OKCancel, 
         MessageBoxImage.Question); 

       if (result == MessageBoxResult.Cancel) 
       { 
        return; 
       } 
       else 
       { 
        //set values 
       } 
    } 
    } 

SelectionChangedイベントを使用しようとしましたが、これは動作しませんでした、

private void Combobox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (DataContext == null) 
      return; 
     var combo = (sender as ComboBox); 

     if (combo != null && combo.IsDropDownOpen) 
     { 
      combo.IsDropDownOpen = false; 
      var binding = combo.GetBindingExpression(ComboBox.SelectedItemProperty); 

      binding.UpdateSource(); 
      binding.UpdateTarget(); 
     } 
    }` 
+0

'(結果= MessageBoxResult.Cancel!)場合_selectedCurrency =値;' – Vyrira

+0

@Vyrira私はこれを試してみましたが、これにもコンボボックスが閉じて、メッセージボックス – S52

+0

と重複は、あなたが通貨へのアクセス権を持っていないいませんコンボボックス? MessageBoxを表示する前に 'Currency.IsDropDownOpen = false; 'を設定することができます。 – Vyrira

答えて

0

.Netスレッドプール上のタスクにまたがってディスパッチャを介してメッセージボックスを表示することができます。

0

SelectionChangedイベントでこれを行うことができます。

selectedItemフィールドは、通貨の変更がないときにMessageBoxを表示しないように、前に選択したアイテムを追跡します。選択した項目が変更された場合は、ドロップダウンメニューが表示されずにMessageBoxが表示されます。次に、ユーザーがキャンセルをクリックすると、変更を元に戻します。それ以外の場合は、現在の選択内容をselectedItemに保存して将来比較します。

private object selectedItem = null; 

private void Currency_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (Currency.SelectedItem == selectedItem) 
     return; 

    Currency.IsDropDownOpen = false; 

    MessageBoxResult result = MessageBox.Show("Are you sure you want to change the currency?", 
      "Warning", 
      MessageBoxButton.OKCancel, 
      MessageBoxImage.Question); 

    if (result == MessageBoxResult.Cancel) 
     Currency.SelectedItem = selectedItem; 
    else 
     selectedItem = Currency.SelectedItem; 
} 
関連する問題