Включить расширитель при проверке состояния кнопки wpf datagrid - PullRequest
0 голосов
/ 19 ноября 2018

предположим, у меня есть сетка данных, в которой есть 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, даже если в коллекции есть запись.

Так как же я могу контролировать видимость расширителя для каждой строки?

1 Ответ

0 голосов
/ 19 ноября 2018

Я исправил это со своим собственным.

создайте логическое свойство в самой модели, чтобы оно проверяло каждый элемент. А затем связать видимость расширителя со свойством этой модели.

Мой обновленный код xaml для расширителя выглядит следующим образом:

 <DataGridTemplateColumn>
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Expander Style="{StaticResource PlusMinusExpanderStyle}"
                                                  ToolTip="Rule Details"
                                                  Visibility="{Binding ISMonitorExanderVisible, 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>

Я все еще ищу другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...