2009-10-30 13 views

Répondre

0

Luc,

Vous n'êtes pas le premier à poser cette question. C'est un inconvénient majeur de la version actuelle de WPF où il n'y a aucun événement tel que PreviewSelectionChangeEvent pour le contrôle dérivé Selector. La seule solution acceptée par la communauté à ce problème est bien sûr une solution HACK. Voici l'approche.

public void OnSelectionChange(object sender, SelectionChangedEventArgs e) 
{ 
    // Selector is based class for all selection enabled control 
    // (not too sure if your datagrid 
    // derives from the same class, you will need to check). 
    var selector = e.OriginalSource as Selector; 
    if (selector == null) return; 

    // Get the old items and new items from the selection change 
    // (note, that they are IList type). 
    // Let's assume that your datagrid will only allow single cell selection only, 
    // ie. newItems.Count == 1 
    var newItems = e.AddedItems; 
    var oldItems = e.RemovedItems; 

    // May need to check if not null first. 
    if (oldItems.Count == 1 && newItems.Count == 1) 
    { 
     // Checking logic for the first (and only) items. 
     // Casting the item into our known type. 
     var myObject = newItems[0] as myType; 

     // Notice that I reversed the logic, this is because we are 
     // only interested in when our logic fails and we need to revert 
     // the selection to the old item, 
     // otherwise the new item is selected by default 
     if (!(myObject != null && SomeOtherCondition)) 
      selector.SelectedItem = oldItems[0]; 

    } 

} 

Espérons que cela vous mène à une solution.