Wpf 如何将自动完成框添加到数据网格?

Wpf 如何将自动完成框添加到数据网格?,wpf,mvvm,wpf-controls,Wpf,Mvvm,Wpf Controls,我的应用程序中有一个datagrid,有两列和4行。每个单元格都需要是WPF Toolkit autocompletebox控件。我想使用MVVM模式实现整个过程。使用以下文本框填充单元格很容易: <DataGrid ItemsSource="{Binding viewModel, Path=Fields}" AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" Alternat

我的应用程序中有一个datagrid,有两列和4行。每个单元格都需要是WPF Toolkit autocompletebox控件。我想使用MVVM模式实现整个过程。使用以下文本框填充单元格很容易:

<DataGrid ItemsSource="{Binding viewModel, Path=Fields}"  AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" AlternatingRowBackground="Gainsboro">
            <DataGrid.Columns>                    
                <DataGridTextColumn Header="Predicate" Binding="{Binding Key}"/>                
                <DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
            </DataGrid.Columns>
</DataGrid>

但是,出于某些原因,尝试对自动完成框执行相同的操作是行不通的。它编译并运行,但键入时不会打开“自动完成”框。我用过:

<DataGrid ItemsSource="{Binding viewModel, Path=Fields}"  AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" AlternatingRowBackground="Gainsboro">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Pre">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <wpfToolkit:AutoCompleteBox ItemsSource="{Binding viewModel, Path=AvailableFields}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
</DataGrid>

绑定属性的定义如下:

public IEnumerable<KeyValuePair<string, string>> Fields
public IEnumerable<string> AvailableFields
公共IEnumerable字段
公共IEnumerable可用字段
有什么想法吗

更新:以下是基于@Damascus reply的整个XAML。由于某种原因,也不起作用

<UserControl x:Class="IKB.Views.IKBInputView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:vm="clr-namespace:IKB.ViewModels"
             xmlns:wpfToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <vm:IKBInputVM x:Key="viewModel" />
    </UserControl.Resources>
    <StackPanel Orientation="Vertical">        
        <DataGrid ItemsSource="{Binding viewModel, Path=Fields}"  AutoGenerateColumns="False" CanUserResizeColumns="True" CanUserSortColumns="True" AlternatingRowBackground="Gainsboro">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Pre">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <wpfToolkit:AutoCompleteBox ItemsSource="{Binding DataContext.viewModel.AvailableFields, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</UserControl>

这是因为您不在同一个
DataContext

每个
AutoCompleteBox
都有自己的
DataContext
(不确定其确切位置,但它与当前单元格本身相关),因此它会在错误的位置查找ItemsSource

您的
绑定必须引用原始数据上下文。
假设此DataGrid位于UserControl中,请尝试:

<wpfToolkit:AutoCompleteBox ItemsSource="{Binding DataContext.viewModel.AvailableFields,
           RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}} />

要使这个XAML起作用,
可用字段
必须是
字段
的子字段,就像
在文本框示例中是
字段
的子字段一样。那么我如何使它成为自动完成的ItemsSource不是字段的子字段?由于某种原因没有起作用。XAML不适合在评论中使用,所以我将其作为问题的编辑附加。让它工作吧。它应该是
。谢谢