Я пытаюсь использовать AutoCompleteBox (находится в WPFToolkit) вместо обычного текстового поля внутри DataGridTemplateColumn, но, похоже, он не обновляет связанный источник.WPF AutoCompleteBox в проблемах редактирования DataGridTemplateColumn
Фактически, когда я изменяю текст и нажимаю Enter или выхожу за пределы ячейки, текст возвращается к исходному значению свойства.
Вот небольшое приложение WPF (Framework 4.0), который воспроизводит проблему
(требуется ссылка на следующие wpf toolkit сборками:
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);
}
}
Любая идея?
Я уже пробовал, но он не работает либо ... :( – digEmAll
как насчет Mode = «TwoWay»? –
Да, это работает! Я думал TwoWay был по умолчанию ... в любом случае благодарственные годов много :) – digEmAll