使用 ListView for CellTemplate 时强制 DataGrid 进入编辑模式
您好,
在 WPF DataGridTemplateColumn 中,我有一个使用 ListView 的 CellTemplate 和一个使用 DataGrid 的 CellEditingTemplate。
<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,则双击可以工作,但随后我会看到一个禁用的列表视图,它看起来不正确,并且任何样式黑客都感觉像是丑陋的拼凑。
请注意,我尝试过单击编辑,但没有别耍花招。
任何帮助表示感谢,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当然,一旦我这么问,答案就会具体化:)如果我使用 单击编辑技巧并将其连接到列表视图双击它一切按预期工作:
在后面的代码中:
Of course as soon as I ask SO, the answer materializes :) If I use the FindVisualParent method from the single click editing trick and wire that up to the list view double click it all works as expected:
and in the code behind:
我的 DataGrid 遇到了非常类似的问题。以下是导致我的项目出现问题的原因:我的 DataGrid 中的 ItemsSource 被分配了一个实现 IEnumerable 的自定义列表。
我实现了这个列表,以便它为同一索引的不同调用返回不同的对象。就像您第一次调用 list[0] 时,它返回一个包含名称“WPF”的对象,例如,如果您再次调用 list[ 0]它将返回一个全新的对象,其中包含值“WPF”。
因此,如果您要绑定的集合(Limits)是您为其实现了 IEnumerable 和 IList 接口的自定义集合,请检查您的实现。就我而言,它是索引运算符 IndexOf 和 Contains。
我的博客
I had very similar problem with my DataGrid. Here is what caused the problem in my project: The ItemsSource in my DataGrid is assigned a custom list that implements IEnumerable.
I implemented this list so that it returns different object for different calls of the same index.. like if you call list[0] the first time it returns an object that holds the name "WPF" for example if you call it again list[0] it will return for you a completely new object that holds the value "WPF".
So if the collection (Limits) you are binding to, is a custom collection that you implemented IEnumerable and IList interfaces for it, then check your implementation. in my case, it was the index operator, IndexOf and Contains.
My Blog