Я хотел бы добавить свой пользовательский элемент управления в столбец шаблона сетки данных.пользовательский контроль в DataGridTemplateColumn
Пользовательский элемент управления очень похож на текстовое поле, но имеет в нем значок. Пользователь может щелкнуть значок и выбрать элемент из запрашиваемого окна, затем выбранный элемент будет заполнен в текстовое поле.
Моя проблема в том, когда текстовое поле заполнено, после того, как я нажму второй столбец, текст исчезнет. Если я заменю настраиваемый элемент управления простым текстовым полем, результат будет таким же.
Вот пример кода:
//Employee.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleGridTest
{
public class Employee
{
public string Department { get; set; }
public int ID { get; set; }
public string Name { get; set; }
}
}
MainWindow.xaml
<Window x:Class="SimpleGridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="grid" Grid.Row="1" Margin="5" AutoGenerateColumns="False"
RowHeight="25" RowHeaderWidth="10"
ItemsSource="{Binding}"
CanUserAddRows="True" CanUserSortColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Department" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Department}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="ID" Binding="{Binding Path=ID}"
Width="100"/>
<DataGridTextColumn Header="Name"
Binding="{Binding Path=Name}"
Width="200"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
MainWindow.xaml.cs
using System.Windows;
using System.Collections.ObjectModel;
namespace SimpleGridTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ObservableCollection<Employee> _employees = new ObservableCollection<Employee>();
public ObservableCollection<Employee> Employees
{
get { return _employees; }
set { _employees = value; }
}
public MainWindow()
{
InitializeComponent();
grid.ItemsSource = Employees;
}
}
}
Как я могу исправить эту проблему? Или мне нужно написать столбец DataGrid *** как DataGridTextColumn? Заранее спасибо!
С наилучшими пожеланиями,
Джонсон
Похоже, что событие CellEditEnding не запускается, когда первый столбец текстового поля потерял фокус. Это ошибка DataGrid? – Johnsonlu