안녕하세요이 내 문제가 왜 잘 모릅니다 :DataGridRow.IsSelected이 설정되고 난
나는 두 가지 스타일이 DataGridRow 및 DataGridCell의 자원에 정의 된 가지고 :
이<Style TargetType="{x:Type DataGridRow}">
<Setter Property="DataGridRow.IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="LightSteelBlue" />
</Trigger>
</Style.Triggers>
</Style>
나는 기본적으로 행을 원하는 사용자가 선택하면 파란색으로 강조 표시됩니다.
나는 MessageWrapper
과 SignalWrapper
클래스를가집니다. 각 MessageWrapper
에는 SignalWrappers
(때때로 비어있을 수 있음) 목록이 있습니다. 그래서 첫 번째 데이터 그리드는 모든 MessageWrappers
표시하는 것입니다 :
<DataGrid x:Name="messageGrid"
Grid.Column="0"
Margin="3"
AutoGenerateColumns="False"
CanUserAddRows="False"
HorizontalScrollBarVisibility="Hidden"
IsReadOnly="True"
ItemsSource="{Binding SelectedBusWrapper.MessageWrappers}"
SelectedItem="{Binding SelectedBusWrapper.SelectedMessageWrapper}"
attachedProperties:SelectingItemAttachedProperty.SelectingItem="{Binding SelectedBusWrapper.MessageWrapperToScrollIntoView,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto" Header="Filter">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox MaxWidth="15"
MaxHeight="15"
CommandParameter="{Binding}"
IsChecked="{Binding Filter}"
Style="{StaticResource CheckBoxStyle}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="9*"
Binding="{Binding Message.Name}"
Header="Name" />
<DataGridTextColumn Width="9*"
Binding="{Binding HexId}"
Header="Id" />
<DataGridTextColumn Width="11*"
Binding="{Binding Message.Sender}"
Header="Sender" />
</DataGrid.Columns>
</DataGrid>
이 DataGrid
의 각 행은 CheckBox
열이 있습니다. CheckBox
을 전혀 선택하지 않으면 모든 SignalWrappers
이 두 번째 DataGrid
에 표시됩니다. 하나 이상의 항목이 선택되어 있으면 SignalWrappers
의 체크 박스 MessageWrappers
만 표시되어야합니다. 여기 DataGrid
: 사용자가 제 DataGrid
하나 이상의 메시지 (들)를 선택하면
<DataGrid Grid.Column="1"
Margin="3"
AutoGenerateColumns="False"
CanUserAddRows="False"
HorizontalScrollBarVisibility="Hidden"
IsReadOnly="True"
ItemsSource="{Binding SelectedBusWrapper.SelectedSignalWrappers}"
SelectedItem="{Binding SelectedBusWrapper.SelectedSignalWrapper}"
SelectionMode="Extended">
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</DataGrid.Resources>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding MouseDoubleClickCommand}" CommandParameter="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto" Header="Filter">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox MaxWidth="15"
MaxHeight="15"
CommandParameter="{Binding}"
IsChecked="{Binding Filter}"
Style="{StaticResource CheckBoxStyle}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="6*"
Binding="{Binding Signal.Name}"
Header="Name" />
<DataGridTemplateColumn Width="Auto" Header="Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox MinWidth="75"
IsEditable="True"
ItemsSource="{Binding Signal.Values.Values}"
SelectedItem="{Binding SelectedValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
이제 그 메시지 신호는 상기 제 강조되어야한다. 사용자가 두 번째 신호를 선택하면 부모 메시지가 첫 번째 DataGrid
에 강조 표시되어야합니다. MessageWrapper
클래스의
바운드 프로퍼티 :
이public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected == value) {
return;
}
isSelected = value;
foreach (var item in SignalWrappers) {
item.IsSelected = value;
}
RaisePropertyChanged("IsSelected");
}
}
SignalWrapper
클래스의
바운드 속성 :
public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected == value) {
return;
}
isSelected = value;
ParentMessageWrapper.IsSelected = value;
RaisePropertyChanged("IsSelected");
}
}
지금 내가 이상한 behavoir을 나는 이해할 수 없다는 :
는 내가 처음 CheckBox
검사 할 때 처음에는 DataGrid
:
메시지가 강조 표시되고 두 번째 DataGrid
은 해당 메시지의 신호 만 표시하고 강조 표시합니다. 이것은 지금까지 올바른 내용입니다. 이제 두 번째 메시지를 확인하면 두 행과 해당 행의 모든 신호가 강조 표시됩니다. 디버깅을하는 동안 나는 첫 번째 MessageWrappers
IsSelected
플래그가 false로 설정되고 모든 신호 플래그가 false로 설정된다는 사실을 알게되었습니다. 그 다음 두 번째 MessageWrappers
플래그가 true로 설정되고 모든 신호 플래그가 true로 설정됩니다. 올바른 것이므로 그 후 처음에는 MessageWrapper
IsSelected
플래그가 true로 설정되었다는 것을 이해할 수없는 이유로 MessageWrappers
플래그를 true로 설정하고 다른 신호 플래그를 true로 설정합니다.
참고 : 세 번째를 확인하면 CheckBox
가 예상대로 다시 작동합니다.
왜 이것이 사람인지 이해할 수 있습니까? 미리 도움을 주셔서 감사합니다! 이 IsSelected
SingleWrapper
에 등을 설정 돌아갑니다 ParentMessageWrapper.IsSelected = value;
설정 때문에 SingleWrapper
에 IsSelected
을 설정할 때