Заставьте DataGrid в режим редактирования при использовании ListView для CellTemplate
-
29-09-2019 - |
Вопрос
Привет,
В 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 для него, затем проверьте вашу реализацию. В моем случае это был оператор индекса, индекс и содержит.