Заставьте DataGrid в режим редактирования при использовании ListView для CellTemplate

StackOverflow https://stackoverflow.com/questions/3500286

Вопрос

Привет,

В WPF DatagridteMplateColumn у меня есть целка, используя ListView и CellEditingTemplate, используя 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>

Проблема, которую я нахожусь в том, чтобы заставить столбец в режим редактирования двойного щелчка? Это поведение по умолчанию для других столбцов, и я полагаю, что в DataGrid в целом. Нажатие F2 запускает режим редактирования, но двойной щелчок с помощью мыши нет.

Если я установлю listView.iseNabled на false, то дважды клавиши работают, но потом у меня есть представление списка отключенного списка, который не выглядит правильно, и любой стиль взлома чувствует себя как уродливый клюд.

Обратите внимание, что я пробовал Одноместный клик редактирование который не сделал трюк.

Любая помощь оценила, спасибо!

Это было полезно?

Решение

Конечно, как только я прошу этого, ответ материализуется :) Если я использую метод FindvisualParent от Одноместный Нажмите Редактирование трюка и провод, который вплоть до списка, дважды щелкните все работает, как и ожидалось:

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

И в коде позади:

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

Другие советы

У меня была очень похожая проблема с моей DataGrid. Вот что вызвало проблему в моем проекте: элементыSource в моей DataGrid присваивается пользовательский список, который реализует IENumerable.

Я реализовал этот список, чтобы он возвращал другой объект для разных вызовов одного и того же индекса .. Как если вы вызовете список [0], впервые, он возвращает объект, который содержит имя «WPF», например, если вы звоните в список снова [ 0] Это вернет для вас совершенно новый объект, который содержит значение «WPF».

Поэтому, если с коллекцией (пределами) вы обязательны, является пользовательской коллекцией, которую вы реализовали IENumerable и Ilist Interfaces для него, затем проверьте вашу реализацию. В моем случае это был оператор индекса, индекс и содержит.

Мой блог

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top