Domanda

Saluti,

In un WPF DataGridTemplateColumn Ho un CellTemplate utilizzando un ListView e un CellEditingTemplate utilizzando un DataGrid.

<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>

Il problema che sto affrontando è come forzare la colonna in modalità di modifica su doppio click? Questo è il comportamento di default per le altre colonne e credo che per il DataGrid in generale. Premendo F2 si avvia modalità di modifica, ma un doppio click con il mouse non è così.

Se ho impostato il ListView.IsEnabled False poi le opere doppio clic, ma poi ho una lista disabile vista che non sembra ritiene di destra e di qualsiasi Hack stile come un brutto kludge.

Si noti che ho provato la modifica solo click che non ha fatto il trucco.

Qualsiasi aiuto apprezzato, grazie!

È stato utile?

Soluzione

Naturalmente, non appena chiedo Quindi, la risposta si materializza :) Se uso il metodo FindVisualParent dal modifica solo click trucco e filo che fino alla visualizzazione elenco fare doppio clic su di esso tutte le opere come previsto:

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

e nel codice dietro:

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();
    }
}

Altri suggerimenti

Ho avuto problemi molto simile con il mio DataGrid. Ecco che cosa ha causato il problema nel mio progetto:. L'ItemsSource nel mio DataGrid viene assegnato un elenco personalizzato che implementa IEnumerable

ho implementato questa lista in modo che restituisca oggetto diverso per i diversi appelli della stesso indice .. come se si chiama lista [0] la prima volta che restituisce un oggetto che contiene il nome di "WPF", per esempio, se lo si chiama ancora una volta la lista [0] verrà restituito per voi un nuovo oggetto che contiene il valore "WPF".

Quindi, se la raccolta (Limits) si sono vincolanti per, è una collezione personalizzata che è stato implementato interfacce IEnumerable e IList per esso, quindi controllare l'implementazione. nel mio caso, è stato l'operatore di indice, IndexOf e Contiene.

Il mio blog

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top