【发布时间】:2018-08-10 12:01:14
【问题描述】:
一个简单的Datagrid,它按属性之一对行进行分组:
<DataGrid x:Name="MyDataGrid" SelectionChanged="MyDataGrid_SelectionChanged" ItemsSource="{Binding Programs}"
Style="{StaticResource dataGridStyle}">
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Heading}" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
Style 如有需要:
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="Aqua" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Top"/>
<ItemsPresenter />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="dataGridStyle" TargetType="DataGrid">
<Setter Property="SelectionMode" Value="Extended"/>
<Setter Property="AutoGenerateColumns" Value="True"/>
<Setter Property="CanUserDeleteRows" Value="False"/>
<Setter Property="Background" Value="#302E2A"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="CanUserResizeColumns" Value="False"/>
<Setter Property="CanUserResizeRows" Value="False"/>
<Setter Property="CanUserSortColumns" Value="False"/>
<Setter Property="HeadersVisibility" Value="None"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="Height" Value="Auto"/>
<Setter Property="Width" Value="Auto"/>
<Setter Property="VerticalScrollBarVisibility" Value="Visible"/>
<Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="GridLinesVisibility" Value="None"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="SelectionMode" Value="Single"/>
</Style>
后面的代码:
private void FillSummit()
{
public ListCollectionView Programs { get; private set; }
Programs = new ListCollectionView(SummitPrograms);
Programs.GroupDescriptions.Add(new
PropertyGroupDescription("Room"));
}
private void MyDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dg = sender as DataGrid;
System.Windows.MessageBox.Show($"{dg?.SelectedItem}");
}
问题: 当我单击任何行时,它会弹出一条消息,关闭它后,当我再次选择同一行时,它不会引发 selectionChangedEvent 那么我怎样才能让它工作,让它再次弹出呢?
【问题讨论】:
-
SelectionChanged 事件只应在选择实际更改为预期行为时引发。
-
那么是否还有其他事件可以使其重新选择