2016-06-10 4 views
0

hat was ich habe:Feuer Lostfocus-Ereignis nur dann, wenn IsKeyboardFocusWithin Property einen falschen Wert

ich eine Combobox haben. Hier ist der Lost-Focus mit Befehl in MVVM Stil:

<ComboBox .............> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="LostFocus"> 
      <i:InvokeCommandAction Command="{Binding DataContext.OrderIdLostFocusCommand, UpdateSourceTrigger=PropertyChanged, 
                RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ComboBox> 

Und im Ansichtsmodell:

//Constructor 
public DispatchViewModel(IEventAggregator _eventAggregator) 
{ 
    eventAggregator = _eventAggregator; 

    //Some Code 

    OrderIdLostFocusCommand = new RelayCommand(Execute_OrderId_LostFocus); 
} 

public RelayCommand OrderIdLostFocusCommand { get; set; } 

private void Execute_OrderId_LostFocus(object obj) 
{ 
    //Some Calculations 

    eventAggregator.GetEvent<MoveFocusToDatePickerEvent>().Publish(true); 
} 

in den Code-Behind:

//Constructor 
public DispatchView(DispatchViewModel _viewModel, IEventAggregator _eventAggregator) 
{ 
    InitializeComponent(); 
    this.DataContext = _viewModel; 
    _eventAggregator.GetEvent<MoveFocusToDatePickerEvent>().Subscribe(MoveFocusToDateOfDispatch); 
} 

private void MoveFocusToDateOfDispatch(bool obj) 
{ 
    this.Dispatcher.BeginInvoke((Action)delegate { dpInvoice.Focus(); }, DispatcherPriority.Render); 
} 

Problem:

Wenn die Combobox fokussiert ist und ich versuche, DropDown zu öffnen, wird das lostfocus-Ereignis ausgelöst und der Fokus wird auf DataPicker gesetzt.

Was ich will:

Stattdessen möchte ich nur Lost-Focus-Ereignis ausgelöst, wenn Eigentum der ComboBox IsKeyboardFocusWithin falsch ist.

Antwort

1

Verwenden Sie einfach eine Interaktionen DataTrigger auf IsKeyboardFocusWithin werden false. Es ist im http://schemas.microsoft.com/expression/2010/interactions Namensraum.

<i:Interaction.Triggers> 
    <ii:DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ComboBox}, 
            Path=IsKeyboardFocusWithin}" 
        Value="false"> 
     <i:InvokeCommandAction .../> 
    </ii:DataTrigger> 
</i:Interaction.Triggers> 
+0

Aber wie kann ich einen Trigger in DataTrigger verwenden? – Vishal

+0

DataTriggers sind allmächtig. –

+0

Danke H.B. das funktioniert wie erwartet. – Vishal

Verwandte Themen