2009-06-03 4 views
4

Wenn ein WPF DataGrid auf der linken Seite eines Fensters mit einem Bereich auf der rechten Seite für die Anzeige des ausgewählten Datensatzes. Der ausgewählte Datensatz besteht aus Textbox es und ComboBox es sind deaktiviert, bis die Schaltfläche Bearbeiten geklickt wird. Alles funktioniert wie erwartet.WPF DataGrid Switch-Vorlage zwischen Ansichtsmodus und Bearbeitungsmodus

Es scheint jedoch ein bisschen ungeschickt zu sein, ComboBox es zu bevölkern, wenn die SelectedItem der DataGrid geändert wird. Ein viel leichteres Steuerelement wie ein TextBlock könnte verwendet werden, bis die Schaltfläche Bearbeiten geklickt wird, dann könnte die TextBlock s für ComboBox es ausgeschaltet werden.

Ich bin sicher, dass dies mit einer Art Templating getan werden kann, aber wenn ich versuchte, damit zu experimentieren, melden alle Ereignisse, die mit der ComboBox es verbunden sind, einen Fehler, da sie nicht mehr vorhanden sind wurde im "Ansichtsmodus" durch TextBlocks ersetzt.

Ich gehe wahrscheinlich so falsch, so würde einige Anleitung geschätzt werden.

Antwort

3

hier ausgezeichnet zu wählen ist article

Ein-Klick-Bearbeitung auf alle Zellen im Datagrid anwenden zu können

  1. Fügen Sie den Stil unten in die Ressourcen des Datagrid
  2. Fügen Sie die Methode in den Code hinter
  3. Key auf dem Style (ex:

Ein-Klick-Bearbeitung nur auf bestimmte Zellen im Datagrid

  1. Legen Sie eine x anwenden zu können.)
  2. Fügen Sie den Stil in die Ressourcen des Datagrid
  3. den Stil der Cellstyle-Eigenschaft der Spalten anwenden, die Sie einzigen Klick Bearbeitung (ex.)
  4. Fügen Sie die Methode in den Code haben möchten hinter

    // 
    // 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; 
    } 
    
+0

Dank Arsenmkrt, ich habe einige von Dr. WPF Artikel gesehen, aber du hast recht, das eine entlang der Linien ist das, was ich suche. – Mitch

+1

Dieser Link ist gestorben, versuchen Sie stattdessen hier: http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing – Smithy

1

Die ContentTemplateSelector Eigenschaft sollte Ihnen ermöglichen, eine Vorlage oder eine andere, je nach dem aktuellen Modus (view/edit)