使用cellTemplate的ListView时,将DataGrid迫使DataGrid进入编辑模式
-
29-09-2019 - |
题
问候,
在WPF datagridtemplatecolumn中,我使用listView和使用datagrid的单元格板的celltemplate。
<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>
我面临的问题是如何在双击时迫使该列进入编辑模式?这是其他列的默认行为,我相信对数据杂志的默认行为。按F2启动编辑模式,但是使用鼠标双击却没有。
如果我将listView.isenabled设置为false,则双点击工作起作用,但是我有一个禁用的列表视图,该视图看起来不正确,任何样式的黑客都感觉像是一个丑陋的kludge。
请注意我尝试过 单击编辑 这没有解决问题。
任何帮助,感谢!
解决方案
当然,一旦我问,答案就会实现:)如果我使用FindVisualParent方法 单击编辑技巧 并将其连接到列表视图double单击它的所有功能都按预期工作:
<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有非常相似的问题。这是引起我项目中问题的原因:我的数据杂志中的项目源被分配了一个实现IEnumerable的自定义列表。
我实现了此列表,以便它返回相同索引的不同调用的不同对象。就像您第一次返回列出名称“ WPF”的对象时,请访问列表[0],例如,如果您再次调用它, 0]它将为您返回一个拥有“ WPF”值的全新对象。
因此,如果您要绑定的集合(限制)是您实现的自定义集合,并为其实现了Ilist接口,请检查您的实现。就我而言,它是索引操作员,索引和包含。
不隶属于 StackOverflow