2017-12-28 42 views
3

In meinem Datagrid habe ich eine DataGridCheckBoxColumn Implementierung:Wie aktivieren oder deaktivieren Sie das Kontrollkästchen basierend auf dem Eigenschaftswert?

<DataGrid ItemsSource="{Binding Collection}"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding Selected}" 
           ElementStyle="{StaticResource MaterialDesignDataGridCheckBoxColumnStyle}" 
           EditingElementStyle="{StaticResource MaterialDesignDataGridCheckBoxColumnEditingStyle}"> 
     <DataGridCheckBoxColumn.CellStyle> 
      <Style TargetType="DataGridCell"> 
       <EventSetter Event="CheckBox.Unchecked" Handler="Match_Unchecked"/> 
        <Style.Triggers> 

             <!-- Enabling --> 
             <DataTrigger Binding="{Binding DataContext.IsAdding, 
        RelativeSource={RelativeSource AncestorType=Window}}" Value="false"> 
              <Setter Property="IsEnabled" Value="True" /> 
             </DataTrigger> 

             <!-- Disabling --> 
             <DataTrigger Binding="{Binding DataContext.IsAdding, 
        RelativeSource={RelativeSource AncestorType=Window}}" Value="True"> 
              <Setter Property="IsEnabled" Value="False" /> 
             </DataTrigger> 

     </Style> 
</DataGridCheckBoxColumn.CellStyle> 

wie man sehen kann ich ein DataTrigger auf die Style von DataGridCheckBoxColumn eingefügt habe, wenn so im Wesentlichen die Eigenschaft IsAdding falsch ist, die Cell mit dem Inhalt im Innern sollte aktiviert, ansonsten deaktiviert sein.

Das scheint nicht zu funktionieren, die Cell ist sogar aktiviert, warum?

+0

Haben Sie versucht, das Stilziel auf 'CheckBox' und nicht auf' DatGridCell' zu setzen? Funktioniert dein Event Setter überhaupt? – XAMlMAX

+0

@XAMlMAX die 'CheckBox' ist innerhalb der' DataGridCell' und ich kann nicht zwei Stile in einem haben – MrFantastic

+0

Ich verstehe das, aber ich bitte dich nicht, einen anderen Stil dort zu setzen, ich möchte den Zieltyp ändern. Und funktioniert Ihr Event Setter? – XAMlMAX

Antwort

0

Ich vermute, dass das Problem mit der LogicalTree Ihrer Anwendung ist. Der Code, den Sie dort haben, sollte eigentlich gut funktionieren, aber es scheint, dass Sie diese inside of the demo application testen können. Normalerweise wäre das in Ordnung, jedoch wurde ein Steuerelement hinzugefügt, um XAML anzuzeigen, das den logischen Baum (I have a fix in Bearbeitung, aber noch nicht vollständig) durchbricht.

Sie können, indem sie zwei Änderungen an der Demo-Anwendung dieses Problem umgehen:

  1. Im MainWindow.xaml ersetzen die XamlDisplayerHost mit einem regelmäßigen ContentControl
  2. In Grids.xaml ersetzen die XamlDisplayerPanel mit einem regelmäßigen StackPanel

Danach sollte Ihr Stil wie erwartet funktionieren.

Verwandte Themen