问候,

在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接口,请检查您的实现。就我而言,它是索引操作员,索引和包含。

我的博客

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top