Привет, я на самом деле создаю пользовательский элемент управления WPF DataGrid.
Что нужно, чтобы эти комбо-списки отображали пол в комбо-боксе и что происходит, когда я держу комбо-бокс вне таблицы данных, ее работа, но внутри таблицы данных она не работает. Пожалуйста, помогите мне?
<UserControl x:Class="Custom_DataGrid.Grid3.Grid3"
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"
mc:Ignorable="d" xmlns:sdk="http://schemas.microsoft.com/wpf/2008/toolkit"
d:DesignHeight="300" d:DesignWidth="300" >
<UserControl.Resources>
<DataTemplate x:Key="dueDateCellTemplate">
<TextBlock Text="{Binding DOB}" Margin="5,4,5,4"/>
</DataTemplate>
<DataTemplate x:Key="dueDateCellEditingTemplate">
<DatePicker SelectedDate="{Binding DOB, Mode=TwoWay}"/>
</DataTemplate>
<DataTemplate x:Key="genderCellTemplate">
<TextBlock Text="{Binding GENDER.Gender}" Margin="5,4,5,4"/>
</DataTemplate>
<DataTemplate x:Key="genderCellEditingTemplate">
<!--<ComboBox ItemsSource="{Binding Genders}" SelectedItem="{Binding Genders}" SelectedValue="{Binding Path=GENDER, ElementName=Id}" DisplayMemberPath="Id" SelectedValuePath="Gender"></ComboBox>-->
<ComboBox x:Name="c1" ItemsSource="{Binding Genders}" DisplayMemberPath="Id" Height="50" Width="100"></ComboBox>
<!--<TextBlock Text="{Binding Genders.Gender}" Foreground="Khaki"></TextBlock>-->
</DataTemplate>
</UserControl.Resources>
<Grid>
<DataGrid x:Name="datagrid3" AutoGeneratingColumn="datagrid3_AutoGeneratingColumn" ItemsSource="{Binding Employees}" Foreground="SteelBlue"></DataGrid>
</Grid>
</UserControl>
public enum Designation
{
Sales, Development, HR, BackOffice
}
public class Sex
{
private string id;
private string gen;
public string Id
{
get
{
return id;
}
set
{
id = value;
}
}
public string Gender
{
get
{
return gen;
}
set
{
gen = value;
}
}
}
public class DataSource
{
ObservableCollection<Employee> empList = new ObservableCollection<Employee>();
List<Sex> genders = new List<Sex>();
public DataSource()
{
empList.Add(new Employee() { ID = 1, NAME = "Neeraj", DOB = Convert.ToDateTime("12/03/1986"), EMAIL = "neeraj@mail.com", GENDER = new Sex() { Id = "M", Gender = "Male" }, PHONE = "9999999999", ACTIVE = false, DESIGNATION = Designation.Development });
empList.Add(new Employee() { ID = 2, NAME = "Mayank", DOB = Convert.ToDateTime("01/01/1986"), EMAIL = "mayank@mail.com", GENDER = new Sex() { Id = "M", Gender = "Male" }, PHONE = "9999999999", ACTIVE = true, DESIGNATION = Designation.BackOffice });
empList.Add(new Employee() { ID = 1, NAME = "Neeraj", DOB = Convert.ToDateTime("12/03/1986"), EMAIL = "neeraj@mail.com", GENDER = new Sex() { Id = "M", Gender = "Male" }, PHONE = "9999999999", ACTIVE = false, DESIGNATION = Designation.Development });
empList.Add(new Employee() { ID = 2, NAME = "Mayank", DOB = Convert.ToDateTime("01/01/1986"), EMAIL = "mayank@mail.com", GENDER = new Sex() { Id = "M", Gender = "Male" }, PHONE = "9999999999", ACTIVE = true, DESIGNATION = Designation.BackOffice });
empList.Add(new Employee() { ID = 1, NAME = "Neeraj", DOB = Convert.ToDateTime("12/03/1986"), EMAIL = "neeraj@mail.com", GENDER = new Sex() { Id = "M", Gender = "Male" }, PHONE = "9999999999", ACTIVE = false, DESIGNATION = Designation.Development });
empList.Add(new Employee() { ID = 2, NAME = "Mayank", DOB = Convert.ToDateTime("01/01/1986"), EMAIL = "mayank@mail.com", GENDER = new Sex() { Id = "M", Gender = "Male" }, PHONE = "9999999999", ACTIVE = true, DESIGNATION = Designation.BackOffice });
genders.Add(new Sex() { Id = "M", Gender = "Male" });
genders.Add(new Sex() { Id = "F", Gender = "Female" });
}
public ObservableCollection<Employee> Employees
{
get
{
return empList;
}
set
{
empList = value;
}
}
public List<Sex> Genders
{
get
{
return genders;
}
set
{
genders = value;
}
}
}
кодирование файла xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Custom_DataGrid.Grid3
{
/// <summary>
/// Interaction logic for Grid3.xaml
/// </summary>
public partial class Grid3 : UserControl
{
public Grid3()
{
InitializeComponent();
this.DataContext = new DataSource();
}
private void datagrid3_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName.ToLower().ToString().Equals("id"))
{
e.Column.Header = "Employee Id";
}
else if (e.PropertyName.ToLower().Equals("name"))
{
e.Column.Header = "Employee Name";
}
else if (e.PropertyName.ToLower().Equals("dob"))
{
e.Column.Header = "Employee DOB";
if (e.PropertyType == typeof(DateTime))
{
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Employee DOB";
templateColumn.CellTemplate = (DataTemplate)Resources["dueDateCellTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["dueDateCellEditingTemplate"];
templateColumn.SortMemberPath = "DueDate";
e.Column = templateColumn;
}
}
else if (e.PropertyName.ToLower().Equals("phone"))
{
e.Column.Header = "Employee Phone";
e.Cancel = true;
}
else if (e.PropertyName.ToLower().Equals("email"))
{
e.Column.Header = "Employee Email";
}
else if (e.PropertyName.ToLower().Equals("gender"))
{
e.Column.Header = "Employee Gender";
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Employee Gender";
templateColumn.CellTemplate = (DataTemplate)Resources["genderCellTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["genderCellEditingTemplate"];
e.Column = templateColumn;
}
else if (e.PropertyName.ToLower().Equals("active"))
{
e.Column.Header = "Employee Active/InActive";
}
else if (e.PropertyName.ToLower().Equals("designation"))
{
e.Column.Header = "Employee Designation";
}
}
}
}
Итак, я пытаюсь создать шаблонный столбец с combobxo в шаблоне cellediting, все работает нормально, но внутри шаблона данных он не работает.
Пожалуйста, помогите мне? Отметьте в текстовом поле, которое я прокомментировал, оно работает нормально ...