1

在 WPF xaml 页面中,我想为用户提供一个组合框,其中将有两个选项:

(1) 允许用户在 gridview 中编辑 (2) 允许用户在表单中编辑

如果用户选择第一个选项,那么我希望用户允许在 gridview 本身中添加/编辑记录。

如果用户选择第二个选项,则在单击 gridview 的添加/编辑按钮时,将出现一个表单页面,其中包含 gridview 的所有字段。在表单中,用户将能够添加/编辑 gridview 的记录。

任何人都可以对此提出想法吗?

这是DataGrid的主要代码。

<Controls:DataGrid Grid.Row="0" SelectedItem="{Binding Path=CurrentSelectedItem, Mode=TwoWay}" AutoGenerateColumns="False" SelectionMode="Single">
              <Controls:DataGrid.Columns>
                <Controls:DataGridTemplateColumn>
                  <Controls:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                      <Button Content="Remove" VerticalAlignment="Center" HorizontalAlignment="Center" Command="{Binding Source={StaticResource cmdDeleteRecord}}" CommandParameter="{Binding Path=Attribute[ExtensionDataId].Value}" Margin="8,0,8,0" />
                    </DataTemplate>
                  </Controls:DataGridTemplateColumn.CellTemplate>
                </Controls:DataGridTemplateColumn>
                <Controls:DataGridTemplateColumn HeaderStyle="{StaticResource WrappedColumnHeaderStyle}" Header="Vendor" CanUserSort="True" ToolTipService.ToolTip="Vendor" SortMemberPath="VendorPrincipalId_Name-Reference" MaxWidth="250">
                  <Controls:DataGridTemplateColumn.ClipboardContentBinding>
                    <Binding Path="Attribute[VendorPrincipalId_Name].Value" Mode="TwoWay" />
                  </Controls:DataGridTemplateColumn.ClipboardContentBinding>                  
                  <Controls:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                      <StackPanel>
                        <TextBox Style="{DynamicResource GridCellTemplateTextBox}" TextWrapping="Wrap">
                          <TextBox.Text>
                            <Binding Path="Attribute[VendorPrincipalId_Name].Value" Mode="TwoWay" />
                          </TextBox.Text>
                        </TextBox>
                      </StackPanel>
                    </DataTemplate>
                  </Controls:DataGridTemplateColumn.CellTemplate>
                </Controls:DataGridTemplateColumn>
                <Controls:DataGridTemplateColumn HeaderStyle="{StaticResource WrappedColumnHeaderStyle}" Header="Vendor's Key" CanUserSort="True" ToolTipService.ToolTip="Vendor's Key" SortMemberPath="Attribute[VendorKey].Value" MaxWidth="250">
                  <Controls:DataGridTemplateColumn.ClipboardContentBinding>
                    <Binding Path="Attribute[VendorKey].Value" />
                 </Controls:DataGridTemplateColumn.ClipboardContentBinding>                
                  <Controls:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                      <StackPanel>
                        <TextBox Style="{DynamicResource GridCellTemplateTextBox}" TextWrapping="Wrap">
                          <TextBox.Text>
                            <Binding Path="Attribute[VendorKey].Value" />
                          </TextBox.Text>
                        </TextBox>
                      </StackPanel>
                    </DataTemplate>
                  </Controls:DataGridTemplateColumn.CellTemplate>
                </Controls:DataGridTemplateColumn>
              </Controls:DataGrid.Columns>
            </controls:DataGrid>
4

1 回答 1

0

我使用触发器解决了这个问题,允许用户编辑网格中的行,如下所示:

<Controls:DataGridTemplateColumn Header="Note Title" CanUserSort="True" ToolTipService.ToolTip="Note Title"  MaxWidth="250">                                  <Controls:DataGridTemplateColumn.CellStyle>
                                    <Style TargetType="Controls:DataGridCell">
                                        <Style.Triggers>
                                            <Trigger Property="IsSelected" Value="true">
                                                <Setter Property="Template">
                                                    <Setter.Value>
                                                        <ControlTemplate>
                                                            <TextBox TextWrapping="Wrap">
                                                                <TextBox.Text>
                                                                    <Binding Path="ColumnValue" Mode="TwoWay" />
                                                                </TextBox.Text>
                                                            </TextBox>
                                                        </ControlTemplate>
                                                    </Setter.Value>
                                                </Setter>
                                            </Trigger>
                                            <Trigger Property="IsSelected" Value="false">
                                                <Setter Property="Template">
                                                    <Setter.Value>
                                                        <ControlTemplate>
                                                            <TextBlock TextWrapping="Wrap">
                                                                <TextBlock.Text>
                                                                    <Binding Path="ColumnValue" Mode="TwoWay" />
                                                                </TextBlock.Text>
                                                            </TextBlock>
                                                        </ControlTemplate>
                                                    </Setter.Value>
                                                </Setter>
                                            </Trigger>
                                        </Style.Triggers>
                                    </Style>
                                </Controls:DataGridTemplateColumn.CellStyle>
                            </Controls:DataGridTemplateColumn>

还有可以使用的 CellEditingTemplate ,但它对我不起作用。所以我使用了触发器。当用户选择行时,我在列的模板中设置 TextBox,而不是 TextBlock。

于 2012-11-28T08:45:58.560 回答