2013-03-18 12 views
5

Attualmente mi legano ai miei TextBox es come:Binding sia LostFoucus e Proprietà Aggiornamento

Text="{Binding DocValue, 
     Mode=TwoWay, 
     ValidatesOnDataErrors=True, 
     UpdateSourceTrigger=PropertyChanged}" 

Questa grande opera per ottenere ogni battitura a fare stato del pulsante di controllo (che voglio).

Inoltre, vorrei tenere traccia dell'evento LostFocus su TextBox (tramite associazione) e fare alcuni calcoli aggiuntivi che potrebbero essere troppo intensi per ogni sequenza di tasti.

Chiunque ha pensieri su come realizzare entrambi?

+0

si potrebbe usare 'TextBox.OnLostFocus' evento –

+0

penso che è voler associare una struttura al LostFocus, che io non so se questo può essere fatto –

+0

Sì speravo in un modo di avere il mio ViewModel fare alcuni calcoli su LostFocus e mantenere la proprietà aggiornata mentre digita. Provare a vedere quanto ritardo ottengo se eseguo il calcolo mentre digito .. potrebbe sembrare brutto dato che gli altri numeri cambiano in base a ciò che digitano. – adondero

risposta

1

Penso di aver trovato una soluzione ... Ho creato un comando composto e lo uso per la comunicazione aggiuntiva.

definizione Comando

public static CompositeCommand TextBoxLostFocusCommand = new CompositeCommand(); 

mio testo

private void TextboxNumeric_LostFocus(object sender, RoutedEventArgs e) 
{ 
    if (Commands.TextBoxLostFocusCommand.RegisteredCommands.Count > 0) 
    { 
     Commands.TextBoxLostFocusCommand.Execute(null); 
    } 
} 

poi nel mio ViewModel, creo un comando delegato e il filo ad esso ..

sembra che si sta lavorando, meraviglia se c'è un modo migliore. Una caduta a questo è che ogni casella di testo attiva questo, non solo i miei elementi che sono collegati alle formule che voglio calcolare. Potrebbe essere necessario pensare a modi per migliorare su questo.

+0

È possibile aggiungere probabilmente un comportamento di comando alla casella di testo. E allegare solo alle caselle di testo che richiedono tale comportamento. – TYY

+0

Ho aggiunto una proprietà di associazione personalizzata alla mia casella di testo che viene impostata quando desidero attivare questo comportamento (disattivata per impostazione predefinita). Sembra funzionare – adondero

+0

Felice di essere di aiuto. – TYY

18

Associare un comando all'evento TextBoxLostFocus.

XAML

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 

<TextBox Margin="0,287,0,0"> 
    <i:Interaction.Triggers> 
      <i:EventTrigger EventName="LostFocus"> 
       <i:InvokeCommandAction Command="{Binding LostFocusCommand}" /> 
      </i:EventTrigger> 
    </i:Interaction.Triggers> 
</TextBox> 

View Modello

private ICommand lostFocusCommand; 

public ICommand LostFocusCommand 
{ 
    get 
    { 
     if (lostFocusCommand== null) 
     { 
      lostFocusCommand= new RelayCommand(param => this.LostTextBoxFocus(), null); 
     } 
     return lostFocusCommand; 
    } 
} 

private void LostTextBoxFocus() 
{ 
    // do your implementation    
} 

si deve fare riferimento System.Windows.Interactiviy per questo. E devi installare una ridistribuibile per usare questa libreria. è possibile scaricarlo dal here

Problemi correlati