Ich habe ein DataGrid mit einer DataGridComboBoxColumn
Spalte und ich muss eine Checkbox-Zelle in einer anderen Spalte aktivieren oder deaktivieren, aber mein Code scheint nicht zu funktionieren.Deaktivieren Sie eine Zelle in WPF-Datagrid, wenn Combo-Wert auf einen Wert gesetzt ist - MVVM
Ich habe den folgenden Code definiert, meine Combo Spalte:
<DataGridComboBoxColumn Header="Location"
SelectedValueBinding="{Binding LocationId, Mode=TwoWay}"
SelectedValuePath="LocationId"
DisplayMemberPath="LocationText"
TextBinding="{Binding Location, Mode=TwoWay}">
und dies ist der Code für meine Checkbox Spalte:
<DataGridCheckBoxColumn Header="Active"
Binding="{Binding IsActive}">
<DataGridCheckBoxColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedLineItem.Location}"
Value="01">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
ich hinzugefügt habe ein Datatrigger zu erfassen, um zu versuchen, wenn die Location-Feld ändert sich zu 01, und basierend darauf versuche ich, die Checkbox-Zelle in der ausgewählten Zeile zu deaktivieren, aber es funktioniert nicht.
Ich muss auch die Kombination basierend auf anderen Werten aktivieren/deaktivieren.
Irgendeine Idee, wie ich das erreichen kann?
UPDATE 1:
Ok, ich habe einige Fortschritte gemacht, wo jetzt meine Trigger treten in aber aus irgendeinem Grund, wenn ich die Lage in meinem Drop-Down für die ausgewählte ändern (von Dusel!) Zelle ändert es den Wert für alle Zeilen auf denselben Wert.
Hier ist meine vollständige Code für die Drop-Down-Spalte:
<DataGridComboBoxColumn Header="Location"
SelectedItemBinding="{Binding DataContext.SelectedLineItem.SelectedLocation,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},
Mode=TwoWay}"
SelectedValuePath="LocationId"
DisplayMemberPath="LocationText"
TextBinding="{Binding Location, Mode=TwoWay}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding DataContext.Locations,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="FontSize" Value="14"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding DataContext.Locations,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}"/>
<Setter Property="SelectedItem" Value="{Binding DataContext.SelectedLocation,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}"/>
<Setter Property="IsReadOnly" Value="False"/>
<Setter Property="IsEditable" Value="True"/>
<Setter Property="FontSize" Value="14"/>
<EventSetter Event="KeyUp" Handler="LocationColumn_KeyUp"></EventSetter>
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsDropDownOpen" Value="true" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
Und hier ist der vollständige Code für meine Checkbox Spalte (nicht um Sie kümmern, was die Auslöser tun - sie sind Test auslöst):
<DataGridCheckBoxColumn Header="Active" Binding="{Binding IsActive}">
<DataGridCheckBoxColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedLocation.LocationId}" Value="1">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedLocation.LocationText}" Value="" >
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedLocation.LocationText}" Value="01" >
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedLocation.LocationText}" Value="02" >
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedLocation.LocationText}" Value="03" >
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
Kann jemand herausfinden, warum alle meine Reihen jetzt eingestellt werden, wenn ich einen Wert in einer Kombination ändere?
Danke.
Die Datacontext für die Bindung kann nicht sein, was Sie denken, es ist; Funktioniert es mit 'RelativeSource AncestorType = DataGrid'? –
@EdPlunkett Ich habe meine Antwort aktualisiert. Habe weiter aber immer noch nicht 100% da. Irgendwelche Ideen? – Thierry