Frage

Grüße,

In einer WPF Datagridtemplatecolumn Ich habe einen Celltemplate ein Listview mit und CellEditingTemplate ein Datagrid verwenden.

<DataTemplate x:Key="LimitsTemplate">
    <ListView ItemsSource="{Binding Limits}" IsEnabled="False">
        <ListView.ItemTemplate>
            ...
        </ListView.ItemTemplate>
    </ListView>
 </DataTemplate>
 <DataTemplate x:Key="LimitsEditingTemplate">
      <toolkit:DataGrid ItemsSource="{Binding Limits}" ...>
            ...
      </toolkit:DataGrid>
 </DataTemplate>

Das Problem, das ich bin vor, wie die Spalte in dem Bearbeitungsmodus mit Doppelklick zu zwingen? Dies ist das Standardverhalten für die anderen Spalten und ich glaube, für das Datagrid im Allgemeinen. Durch Drücken von F2 startet den Bearbeitungsmodus, aber Doppelklick mit der Maus nicht.

Wenn ich die auf False ListView.IsEnabled dann die doppelten Klick funktioniert, aber dann habe ich eine Liste deaktiviert Ansicht, die nicht richtig und jeder Stil Hack fühlt sich an wie eine hässliche kludge sieht.

Beachten Sie, dass ich versucht habe, einzigen Klick Bearbeitung die nicht den Trick.

Jede Hilfe dankbar, danke!

War es hilfreich?

Lösung

Natürlich, sobald ich fragen, SO, ist die Antwort materialisiert :) Wenn ich die FindVisualParent Methode aus der Klick Bearbeitung Trick und Draht, dass bis zu der Listenansicht einen Doppelklick auf das alles funktioniert wie erwartet:

<DataTemplate x:Key="LimitsTemplate">
    <ListView ItemsSource="{Binding Limits}" PreviewMouseDoubleClick="limitsListView_PreviewMouseDoubleClick">
    ...

und in dem Code hinter:

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 = System.Windows.Media.VisualTreeHelper.GetParent(parent) as UIElement;
    }
    return null;
}

void limitsListView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DataGrid dataGrid = FindVisualParent<DataGrid>(sender as UIElement);
    if (dataGrid != null)
    {
        dataGrid.BeginEdit();
    }
}

Andere Tipps

Ich hatte sehr ähnliches Problem mit meinem Datagrid. Hier ist, was das Problem in meinem Projekt verursacht. Die Itemssource in meinem Datagrid zugewiesen ist eine benutzerdefinierte Liste, dass Geräte IEnumerable

implementiert ich diese Liste, so dass es unterschiedliche Objekt zurückgibt für verschiedene Anrufe aus dem gleichen Index .. wie wenn Sie die Liste aufrufen [0] das erste Mal ein Objekt zurückgibt, das den Namen „WPF“ zum Beispiel gilt, wenn man es so nennen wieder Liste [0] es für Sie ein völlig neues Objekt zurück, das den Wert „WPF“.

hält

Wenn also die Sammlung (Limits) Sie sind verbindlich zu, ist eine benutzerdefinierte Sammlung, dass Sie IEnumerable und IList Schnittstellen für sie umgesetzt, dann Umsetzung überprüfen. in meinem Fall war es den Index-Operator, IndexOf und enthält.

Mein Blog

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top