Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridTemplateColumn编辑问题中的WPF自动完成框_C#_Wpf_Datagrid_Autocompletebox - Fatal编程技术网

C# DataGridTemplateColumn编辑问题中的WPF自动完成框

C# DataGridTemplateColumn编辑问题中的WPF自动完成框,c#,wpf,datagrid,autocompletebox,C#,Wpf,Datagrid,Autocompletebox,我试图使用自动完成框(在中找到)而不是DataGridTemplateColumn中的普通文本框,但它似乎没有更新绑定的源代码 事实上,当我修改文本并在单元格外按enter键或单击时,文本将恢复为原始属性值 下面是一个小的WPF应用程序(framework 4.0),它再现了这个问题 (它需要引用以下程序集: WPFToolkit.dll System.Windows.Controls.Input.Toolkit.dll) MainWindows.xaml: <Window x:Class

我试图使用自动完成框(在中找到)而不是DataGridTemplateColumn中的普通文本框,但它似乎没有更新绑定的源代码

事实上,当我修改文本并在单元格外按enter键或单击时,文本将恢复为原始属性值

下面是一个小的WPF应用程序(framework 4.0),它再现了这个问题
(它需要引用以下程序集:
WPFToolkit.dll

System.Windows.Controls.Input.Toolkit.dll

MainWindows.xaml:

<Window x:Class="WpfApplicationTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
        Title="MainWindow" Height="350" Width="525"
        x:Name="wnd">
    <StackPanel>
        <DataGrid ItemsSource="{Binding Path=Items, ElementName=wnd}" 
                  AutoGenerateColumns="False">
            <DataGrid.Columns>

                <DataGridTextColumn Header="Item (textcolumn)" Binding="{Binding Name}" />

                <DataGridTemplateColumn Header="Item (autocompletebox)" >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Name}"/>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <controls:AutoCompleteBox 
                                    Text="{Binding Name}" 
                                    ItemsSource="{Binding Path=Hints, Source={x:Reference wnd}}"  
                                    Populating="ACBox_Populating" />
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</Window>

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public class Item
    {
        public string Name { get; set; }
    }

    public MainWindow()
    {
        this.Hints = new ObservableCollection<string>();
        this.Items = new Item[]{ new Item{ Name = "a" }, new Item{ Name = "b" }};
        InitializeComponent();
    }

    public Item[] Items { get; set; }

    public ObservableCollection<string> Hints { get; set; }

    private void ACBox_Populating(object sender, PopulatingEventArgs e)
    {
        // generate 10 fake suggestions...
        this.Hints.Clear();
        for (int i = 0; i < 10; i++)
            this.Hints.Add(e.Parameter + "_" + i);
    }
}
公共部分类主窗口:窗口
{
公共类项目
{
公共字符串名称{get;set;}
}
公共主窗口()
{
this.Hints=新的ObservableCollection();
this.Items=newitem[]{newitem{Name=“a”},newitem{Name=“b”};
初始化组件();
}
公共项[]项{get;set;}
公共ObservableCollection提示{get;set;}
私有void ACBox_填充(对象发送方,填充事件参数e)
{
//生成10个虚假建议。。。
this.Hints.Clear();
对于(int i=0;i<10;i++)
this.Hints.Add(e.Parameter+“”+i);
}
}

有什么想法吗?

数据网格的默认绑定行为是UpdateSourceTrigger=LostFocus将其更改为PropertyChanged

         <controls:AutoCompleteBox 
                Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                ItemsSource="{Binding Path=Hints, Source={x:Reference wnd}}"  
                Populating="ACBox_Populating" />


Mode=“TwoWay”如何?是的,它可以工作!我以为双向是默认的。。。无论如何,非常感谢:)P.s.:问题在于双向更新,而不是错误的更新资源记录器,事实上它也适用于LostFocus。也许你可以在回答中提到;)通常是,但在自动完成中可能不是