2016-06-21 10 views
0

私は選択肢の変更に基づいてデータグリッドにデータをロードするコンボボックスを持っています。 コンボボックスの選択を変更したら、データグリッドの現在のデータが正しいかどうかを確認する必要があります。正しくない場合は、コンボボックス選択の変更をキャンセルしたいと思います。Combobox Selectionをキャンセルする動作を使用して変更されたイベント

はここ

public class ComboBoxSelectionBehaviour : Behavior<ComboBox> 
{ 

    public static readonly DependencyProperty SourceProperty = DependencyProperty.RegisterAttached(
     "Source", 
     typeof(ViewModel), 
     typeof(ComboBoxSelectionBehaviour), 
     new PropertyMetadata(null)); 

    public ViewModel Source 
    { 
     get { return (ViewModel)GetValue(SourceProperty); } 
     set { SetValue(SourceProperty, value); } 
    } 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged; ; 
    } 



    protected override void OnDetaching() 
    { 
     base.OnDetaching(); 
     AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged; 
    } 

    private void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var combo = sender as ComboBox; 
     if (Source != null) 
     {    
      // Suppress the event if errors exist 
      if (!Source.IsDataCorrect()) 
      {     
       e.Handled = true; 
      } 
     } 
    } 

} 

も、選択した項目が変更されたばかりのイベントコンボボックスを処理した後、私の行動クラスです。

この問題を解決するには、いくつかの提案をしてください。データが修正されていない場合は、単純に
myComboBox.SelectedIndex--

+0

プロパティが変更されたときにViewModelで処理することをお勧めします。 – tgpdyk

答えて

0

ができますか?または、これは無限ループを引き起こすでしょうか?

+0

はい、無限ループを作成します。だから私はこの状況を処理するためにpreviewmousedownイベントとpreviewkeydownイベントを使用しました。私はそれが清潔ではないが、それでも動作することを知っている.. – Peekay

関連する問題