在按钮条件检查中启用扩展器WPF DataGrid

时间:2018-11-19 08:32:05

标签: c# wpf data-binding wpf-controls wpfdatagrid

假设我有一个datagrid,其中有2列,每列1个扩展器。

<DataGrid.Columns>
                            <DataGridTemplateColumn>
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Expander Style="{StaticResource PlusMinusExpanderStyle}"
                                                  ToolTip="Rule Details"
                                                  Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.IsRuleDetailsExpanderVisible, Converter={StaticResource BooleanToVisibilityConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                                  >
                                            <Expander.IsExpanded>
                                                <Binding RelativeSource="{RelativeSource AncestorType={x:Type DataGridRow}}"
                                                         Path="DetailsVisibility"
                                                         Mode="TwoWay">
                                                    <Binding.Converter>
                                                        <converters:BooleanToVisibilityDataGridRow FalseToVisibility="Collapsed" />
                                                    </Binding.Converter>
                                                </Binding>
                                            </Expander.IsExpanded>
                                        </Expander>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

                            <DataGridTemplateColumn Header="Status">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Grid>
                                            <Ellipse  Grid.Column="1"
                                                      Width="15"
                                                      Height="15"
                                                      Fill="{Binding Status,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ColorToBrushConverter}}" />
                                        </Grid>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>



                            <DataGridTemplateColumn Header="Add Rule">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>                                            
                                        <Button Width="22" Height="22"
                                                ToolTip="Add Rule"
                                                BorderThickness="0"
                                                Background="Transparent"
                                                Style="{StaticResource TransparentStyle}"
                                                IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.IsMonitorDataGridColumnEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                                Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.AddRuleCommand}"
                                                CommandParameter="{Binding ElementName=MonitorDataGrid, Path=SelectedItem}">

                                            <Image Source="/OBDApplication;component/Images/addRule1.png"
                                                   Width="17"
                                                   Height="17"                                                     
                                                   ToolTip="Add Rule" />                                               
                                        </Button>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
</DataGrid.Columns>

现在,我必须控制每个扩展器的可见性。单击“添加规则”按钮后,将出现一个新窗口,该窗口需要一些输入并将数据添加到集合中。如果规则中存在任何数据,则只有我应该显示扩展器图标。

所以,我绑定了一个布尔属性来控制可见性,并且在将规则添加到集合之后,我将该布尔属性设为true。但是问题在于,即使行中有记录,扩展器对于每一行都是可见的,这会导致布尔值返回true。

那我如何控制每行扩展器的可见性?

1 个答案:

答案 0 :(得分:0)

我已经用自己的东西修复了。

在模型本身中创建一个布尔属性,以便它将检查每个项目。然后将扩展器的可见性与该模型的属性绑定。

我为扩展器更新的xaml代码如下:

Posts = LoadArrayList("PostsList", PostsModel.class);

我还在寻找其他方法。