2013-08-28 2 views
0

Problème

J'ai un ComboBox et un ToggleButton sur MainWindow avec les liaisons dans les deux sens sur leurs propriétés SelectedIndex et IsChecked, respectivement. Les propriétés auxquelles ils sont liés sont DependencyProperties (DP) et j'ai un point d'arrêt sur les setters, mais le débogueur ne s'arrête jamais non plus. Je devrais noter que les liaisons devraient fonctionner comme les Initialisers sur le travail de DP et les convertisseurs fonctionnent également. La fenêtre de sortie de VS ne présente également aucun problème.La liaison de données bidirectionnelle n'est pas mise à jour pour ComboBox & ToggleButton?

XAML

<ToggleButton x:Name="tbSortDirection" Width="25" IsChecked="{Binding Path=SortDirection,Converter={StaticResource LDB},Mode=TwoWay,ElementName=mwa,UpdateSourceTrigger=PropertyChanged}"> 
    <ed:RegularPolygon Fill="#FF080808" Height="5" UseLayoutRounding="True" Margin="-2,0,0,0" PointCount="3" Width="6"/> 
</ToggleButton>     
<ComboBox x:Name="cbSort" Width="100" VerticalAlignment="Stretch" Margin="-5,0,0,0" SelectedIndex="{Binding SelSortIndex,Mode=TwoWay,ElementName=mwa,UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True" > 
    <ComboBoxItem Content="a"/> 
    <ComboBoxItem Content="b"/> 
    <ComboBoxItem Content="v"/> 
    <ComboBoxItem Content="f"/> 
</ComboBox> 

code-behind (DPs)

public ListSortDirection SortDirection 
{ 
    get { return (ListSortDirection)GetValue(SortDirectionProperty); } 
    set // BreakPoint here 
    { 
     MessageBox.Show(""); 
     SetValue(SortDirectionProperty, value); 
     UpdateSort(); 
    } 
} 

public static readonly DependencyProperty SortDirectionProperty = 
    DependencyProperty.Register("SortDirection", typeof(ListSortDirection), typeof(MainWindow), new PropertyMetadata(ListSortDirection.Ascending)); 



public int SelSortIndex 
{ 
    get { return (int)GetValue(SelSortIndexProperty); } 
    set // BreakPoint here 
    { 
     MessageBox.Show(""); 
     SetValue(SelSortIndexProperty, value); 
     UpdateSort(); 
    } 
} 

public static readonly DependencyProperty SelSortIndexProperty = 
    DependencyProperty.Register("SelSortIndex", typeof(int), typeof(MainWindow), new PropertyMetadata(1)); 
+0

Essayez de supprimer les éléments supplémentaires dans les setters de vos propriétés de dépendance. Il suffit ensuite d'appeler 'SetValue' et de lui donner un autre coup de feu. – PoweredByOrange

+0

Toujours ne pas casser. Est-ce censé casser les setters? Parce que le débogueur ne casse pas sur les getters? Je vais créer un nouveau projet de test et voir s'il est supposé le faire. –

+0

Le convertisseur est-il appelé? Notez que lorsque vous utilisez 'Path' et' ElementName' dans une liaison, il recherche ce chemin dans l'élément spécifié, pas dans le DataContext. Donc, dans le cas de votre CheckBox, il recherche 'mwa.SortDirection'. Qu'est-ce que 'mwa' de toute façon? Est-ce votre 'MainWindow'? – PoweredByOrange

Répondre

0

Il ne cassera pas car WPF appellera directement GetValue et SetValue sur DependencyProperty. Si vous voulez faire quelque chose lorsque la propriété change, vous devez définir le callback lorsque la propriété est modifiée:

public static readonly DependencyProperty SortDirectionProperty = 
    DependencyProperty.Register("SortDirection", 
           typeof(ListSortDirection), 
           typeof(MainWindow), 
           new PropertyMetadata(ListSortDirection.Ascending, SortDirectionPropertyChangedCallback)); 

private static void SortDirectionPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    (d as MainWindow).SortDirectionPropertyChangedCallback(e); 
} 

private void SortDirectionPropertyChangedCallback(DependencyPropertyChangedEventArgs e) 
{ 
    UpdateSort(); 
} 

public ListSortDirection SortDirection 
{ 
    get { return (ListSortDirection)GetValue(SortDirectionProperty); } 
    set { SetValue(SortDirectionProperty, value); } 
} 
0

appelez-vous réellement les setters?

Par exemple, en disant

SortDirection = someOtherSortDirection; 

irait dans votre setter, mais

SortDirection.SomeProperty = something; 

va effectivement dans votre getter.

Définir un point d'arrêt dans votre getter et je ne serais pas surpris s'il est appelé quand vous pensez que votre setter devrait être.

+0

Le débogueur ne s'arrête pas non plus aux getters. –

Questions connexes