Pregunta

Saludos,

En un WPF DataGridTemplateColumn Tengo una CellTemplate usando un ListView y una CellEditingTemplate utilizando una cuadrícula de datos.

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

El problema que estoy enfrentando es cómo forzar la columna en el modo de edición el doble clic? Este es el comportamiento por defecto para las otras columnas y creo que para la cuadrícula de datos en general. Pulsando F2 se inicia el modo de edición, pero el doble clic del ratón no lo hace.

Si fijo el ListView.IsEnabled a false el clic trabajos dobles, pero luego tengo una vista de lista de lesionados que no parece siente ningún hackeo estilo correcto y como un kludge feo.

Tenga en cuenta que he tratado de editar solo clic cuales no hacer el truco.

Cualquier ayuda apreció, gracias!

¿Fue útil?

Solución

Por supuesto, tan pronto como le pido tanto, la respuesta se materializa :) Si utilizo el método FindVisualParent de la edición solo clic truco y alambre que hasta la vista de lista doble clic en él todo funciona como se espera:

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

y en el código detrás:

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

Otros consejos

Yo tenía un problema muy similar con mi cuadrícula de datos. Esto es lo que causó el problema en mi proyecto:. El ItemsSource en mi cuadrícula de datos se le asigna una lista personalizada que implementa IEnumerable

He implementado esta lista para que vuelva objeto diferente para diferentes llamadas del mismo índice .. como si la lista se llama a [0] la primera vez que devuelve un objeto que contiene el nombre de "WPF" por ejemplo, si usted lo llama de nuevo la lista [0] volverá para ti un nuevo objeto que contiene el valor "WPF".

Así que si la colección (límites) que son vinculantes para, es una colección personalizada que ha implementado las interfaces IEnumerable y IList para que, a continuación, comprobar su aplicación. en mi caso, fue el operador de índice, y contiene IndexOf.

Mi blog

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top