问候,
在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,那么双击工作,但是我有一个禁用的列表视图,看起来不正确,任何样式黑客感觉就像一个丑陋的kludge。
请注意,我已经尝试了single click editing但没有做到这一点。
感谢任何帮助,谢谢!
答案 0 :(得分:1)
当然,只要我问SO,答案就会实现:)如果我使用single click editing trick中的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();
}
}
答案 1 :(得分:0)
我的DataGrid问题非常类似。以下是导致我的项目出现问题的原因:我的DataGrid中的ItemsSource被分配了一个实现IEnumerable的自定义列表。
我实现了这个列表,以便为同一索引的不同调用返回不同的对象。就像你第一次调用list [0]一样,如果你调用它就返回一个包含名称“WPF”的对象再次列出[0]它将为您返回一个包含值“WPF”的全新对象。
因此,如果您要绑定的集合(Limits)是您为其实现IEnumerable和IList接口的自定义集合,那么请检查您的实现。在我的例子中,它是索引运算符,IndexOf和Contains。