代码之家  ›  专栏  ›  技术社区  ›  si618

使用CellTemplate的ListView时强制DataGrid进入编辑模式

  •  1
  • si618  · 技术社区  · 14 年前

    问候语,

    <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键启动编辑模式,但使用鼠标双击不启动。

    注意我已经试过了 single click editing

    2 回复  |  直到 14 年前
        1
  •  1
  •   si618    14 年前

    当然,只要我这么问,答案就会出现:)如果我使用 single click editing trick 并将其连接到列表视图双击所有操作都按预期进行:

    <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();
        }
    }
    
        2
  •  0
  •   Community CDub    13 年前

    我的数据网格也有类似的问题。以下是导致我的项目出现问题的原因:我的DataGrid中的ItemsSource被分配了一个实现IEnumerable的自定义列表。

    因此,如果要绑定到的集合(限制)是为其实现IEnumerable和IList接口的自定义集合,请检查实现。在我的例子中,是索引操作符IndexOf和Contains。

    My Blog