1

在WPF XAML頁面我想向用戶提供一個下拉框,其中將有兩種選擇:我們如何允許用戶以不同方式添加/編輯/刪除WPF gridview控件中的記錄?

(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> 
+0

請說明你已經做了什麼,所以回答這個問題會更容易。 – Joulukuusi

+0

我還有一個限制。我不能在這裏使用backgroud .cs文件,因爲有一些架構限制。 – techfun

回答

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。

相關問題