2011-01-05 2 views
1

im travailler avec Silverlight CheckBox et RadioButton, et ont le scénario suivant:L'événement Silverlight ToggleButton a été déclenché avant la mise à jour de la liaison? Punaise?

DataContext:

public class ViewModel : INotifyPropertyChanged 
{ 
    bool isChecked; 

    public bool IsChecked 
    { 
     get { return isChecked; } 
     set 
     { 
      isChecked = value; 
      InvokePropertyChanged("IsChecked"); 
     } 
    } 

    public void OnCheckBoxChecked() 
    { 
     // This function is run when the CheckBox Checked event triggers 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    void InvokePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Vue:

<UserControl x:Class="KSLog.Frontend.Features.CaseOverview.Views.CheckBoxView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Checked="HandleInViewModel"/> 
    </Grid> 
</UserControl> 

Lorsque vous cliquez sur la case à cocher, ' ViewModel.OnCheckBoxChecked 'est exécuté avant que' ViewModel.IsChecked 'soit mis à jour via la liaison. Bien que le 'CheckBox.IsChecked' a été mis à jour.

Est-ce un bug ou un designchoice? Cela semble être un bug pour moi! Sinon, l'événement aurait dû s'appeler Checking? :)

Quelqu'un a-t-il pensé à pourquoi c'est le cas?

Répondre

0

Il y avait déjà une question similaire. 1. Silverlight MVVM binding updates fire in undesired order


  1. approche aussi agréable de faire avancer les choses au travail décrit http://www.codeproject.com/Articles/42988/Silverlight-Behaviors-and-Triggers-Making-a-Trigge.aspx

Ou ma solution (c);)

 var element = FocusManager.GetFocusedElement() as TextBox; 
     if (element!=null) 
     { 
      var binding = element.GetBindingExpression(TextBox.TextProperty); 
      if (binding!=null) 
      { 
       binding.UpdateSource(); 
      } 

     } 
Questions connexes