Wpf DataGridTemplateColumn中的自定义控件
我想将自定义控件添加到数据网格的模板列中 自定义控件与文本框非常相似,但其中有一个图标。用户可以单击图标,并从提示窗口中选择一个项目,然后所选项目将填充到文本框中 我的问题是,当文本框被填充时,单击第二列后,文本将消失。如果我用一个简单的文本框替换自定义控件,结果是一样的 以下是示例代码:Wpf DataGridTemplateColumn中的自定义控件,wpf,datagrid,custom-controls,datagridtemplatecolumn,Wpf,Datagrid,Custom Controls,Datagridtemplatecolumn,我想将自定义控件添加到数据网格的模板列中 自定义控件与文本框非常相似,但其中有一个图标。用户可以单击图标,并从提示窗口中选择一个项目,然后所选项目将填充到文本框中 我的问题是,当文本框被填充时,单击第二列后,文本将消失。如果我用一个简单的文本框替换自定义控件,结果是一样的 以下是示例代码: //Employee.cs using System; using System.Collections.Generic; using System.Linq; using
//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;
}
}
}
使用System.Windows;
使用System.Collections.ObjectModel;
命名空间SimpleGridTest
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
私有ObservableCollection_employees=新ObservableCollection();
公开收集雇员
{
获取{return\u employees;}
设置{u employees=value;}
}
公共主窗口()
{
初始化组件();
grid.ItemsSource=员工;
}
}
}
我如何解决这个问题?或者我需要写一个DataGrid***列作为DataGridTextColumn?提前谢谢
致以最良好的祝愿
Johnson我想你必须指定一个CellEditingTemplate进行编辑,而要显示内容,你必须指定一个普通的celltemplate
<Controls:DataGridTemplateColumn Header="Department" Width="150">
<Controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Department}" />
</DataTemplate>
</Controls:DataGridTemplateColumn.CellTemplate>
<Controls:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Department}"/>
</DataTemplate>
</Controls:DataGridTemplateColumn.CellEditingTemplate>
</Controls:DataGridTemplateColumn>
希望这有帮助。当第一个文本框列失去焦点时,CellEditEnding事件似乎没有触发。这是DataGrid的一个bug吗?