WPF DataGrid在视图模式和编辑模式之间切换模板

时间:2009-06-03 14:01:21

标签: wpf datagrid templating

如果窗口左侧有一个WPF DataGrid,右侧有一个区域用于显示所选记录。所选记录由Textbox es和ComboBox es组成,在单击编辑按钮之前,这些记录将被禁用。一切都按预期工作。

但是,当ComboBox的{​​{1}}被更改时,填充SelectedItem es似乎有点笨拙。在单击“编辑”按钮之前,可以使用更轻的控件(例如DataGrid),然后可以为TextBlock es切换TextBlock

我确信这可以通过某种模板来完成,但是当我尝试对此进行试验时,与ComboBox es关联的所有事件都会报告错误,因为它们不再存在因为它们已在“查看模式”中替换为TextBlocks。

我可能会犯这个错误,所以一些指导意见将会受到赞赏。

3 个答案:

答案 0 :(得分:3)

这里是优秀的article

将单击编辑应用于DataGrid中的所有单元格

  1. 将下面的样式粘贴到DataGrid的资源
  2. 将方法粘贴到
  3. 后面的代码中

    将单击编辑仅应用于DataGrid中的某些单元格

    1. 在样式上设置x:键(例如
    2. 将样式粘贴到DataGrid的资源
    3. 将样式应用于您希望单击编辑的列的CellStyle属性(例如)
    4. 将方法粘贴到

      后面的代码中

                      

      //
      // SINGLE CLICK EDITING
      //
      private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
      {
          DataGridCell cell = sender as DataGridCell;
          if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
          {
              if (!cell.IsFocused)
              {
                  cell.Focus();
              }
              DataGrid dataGrid = FindVisualParent<DataGrid>(cell);
              if (dataGrid != null)
              {
                  if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow)
                  {
                      if (!cell.IsSelected)
                          cell.IsSelected = true;
                  }
                  else
                  {
                      DataGridRow row = FindVisualParent<DataGridRow>(cell);
                      if (row != null && !row.IsSelected)
                      {
                          row.IsSelected = true;
                      }
                  }
              }
          }
      }    
      
      static T FindVisualParent<T>(UIElement element) where T : UIElement
      {
          UIElement parent = element;
          while (parent != null)
          {
              T correctlyTyped = parent as T;
              if (correctlyTyped != null)
              {
                  return correctlyTyped;
              }
      
              parent = VisualTreeHelper.GetParent(parent) as UIElement;
          }
          return null;
      } 
      

答案 1 :(得分:1)

ContentTemplateSelector属性应允许您根据当前模式选择一个或另一个模板(查看/编辑)

答案 2 :(得分:0)

标记的答案链接已经死了。

这可能有助于: http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing