没有代码的datagrid行详细信息

时间:2015-09-22 08:49:50

标签: c# wpf datagrid

我想在检查复选框show rowdetails后如果取消选中则将其折叠。我也不想使用代码隐藏。我知道存在转换器的解决方案。对于事件触发器,我正在使用

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"

但它不起作用。选中复选框后,行详细信息不起作用。我认为在视觉树中有不同分支的问题。

namespace WpfApplication9
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new Data();
    }
}
public class Emloyee
{
    public string FirstName{ get; set; }

    public string LastName { get; set; }

    public string ID { get; set; }

    public double Sallary { get; set; }

}
public class Data
{
    public ObservableCollection<Emloyee> Items { get; set; }
    public Data()
    {
        Items = new ObservableCollection<Emloyee>();
        Items.Add(new Emloyee { FirstName="Jhon",ID="1",LastName="Smith",Sallary=100});
        Items.Add(new Emloyee { FirstName="Neo",ID="0",LastName="Neo",Sallary=0});
    }
}
}

Xaml

    <Window.Resources>
    <SolidColorBrush x:Key="PrimaryBrush" Color="White" />
    <SolidColorBrush x:Key="PrimaryFont" Color="Black" />
</Window.Resources>
<Grid>
    <DataGrid x:Name="ShowGrid"
        ColumnWidth="*"
        EnableRowVirtualization="False" 
        VerticalGridLinesBrush="Transparent" 
        HorizontalGridLinesBrush="Transparent"
        ItemsSource="{Binding Items}" 
        CanUserReorderColumns="False" 
        CanUserResizeColumns="False" 
        CanUserResizeRows="False" 
        AutoGenerateColumns="False"
        CanUserSortColumns="False"
        RowDetailsVisibilityMode="Collapsed">

        <DataGrid.ColumnHeaderStyle>
            <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="Background" Value="{StaticResource PrimaryBrush}"/>
                <Setter Property="Foreground" Value="{StaticResource PrimaryFont}" />
                <Setter Property="FontSize" Value="10"/>
                <Setter Property="HorizontalContentAlignment" Value="Center" />
            </Style>
        </DataGrid.ColumnHeaderStyle>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Label Content="{Binding Sallary}"></Label>
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="10">
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <Label HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalContentAlignment="Center"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox VerticalAlignment="Center" HorizontalAlignment="Center">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="Checked">
                                    <ei:ChangePropertyAction TargetName="ShowGrid" PropertyName="DetailsVisibility" Value="Visible"/>
                                </i:EventTrigger>
                                <i:EventTrigger EventName="Unchecked">
                                    <ei:ChangePropertyAction TargetName="ShowGrid" PropertyName="DetailsVisibility" Value="Collapsed"/>
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <Label Content="First Name" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalContentAlignment="Center"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding FirstName}" HorizontalAlignment="Center" VerticalContentAlignment="Center" FontSize="10"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Width="*" >
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <Label Content="ID" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding ID}" HorizontalAlignment="Center" VerticalContentAlignment="Center" FontSize="10"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Width="*" >
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <Label Content="Last Name" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding LastName}" HorizontalAlignment="Center" VerticalContentAlignment="Center" FontSize="10"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

1 个答案:

答案 0 :(得分:0)

在你的触发器中:

<i:EventTrigger EventName="Checked">
    <ei:ChangePropertyAction TargetName="ShowGrid" PropertyName="DetailsVisibility" Value="Visible"/>
</i:EventTrigger>

首先,CheckBox.Checked不是一个事件,它是一个布尔属性。该事件称为CheckedChanged,但它不适用于您的触发器。

此外,您正在尝试更改名为“ShowGrid”的目标的DetailsVisibility属性...这是DataGrid。 DataGrids没有任何DetailsVisibility属性。 DetailsVisibilityDataGridRow的属性。

如果我是你,我会忘记EventTriggers,而是使用常规的Binding

没有尝试过,但这样的事情应该有效:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>
<!-- ... -->
<DataGridTemplateColumn Width="10">
    <DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
            <Label HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalContentAlignment="Center"/>
        </DataTemplate>
    </DataGridTemplateColumn.HeaderTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox VerticalAlignment="Center" HorizontalAlignment="Center"
                      Checked="{Binding DetailsVisibility,
                                        Mode=TwoWay,
                                        RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},
                                        Converter={StaticResource BooleanToVisibilityConverter}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
相关问题