110,538
社区成员
发帖
与我相关
我的任务
分享
<DataGrid x:Name="gridEmployers" AutoGenerateColumns="False" ItemsSource="{Binding}" DataContext="{Binding}"> <DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Text="{Binding Name}"
IsEditable="True"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource employers}}"
SelectionChanged="OnChangeNameSelection"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<Window.Resources>
<ObjectDataProvider x:Key="employers" ObjectType="{x:Type local:_2011_12_28_01_Data}" MethodName="GetEmployers"/>
</Window.Resources>
public class _2011_12_28_01_Data
{
public IEnumerable<Employer> GetEmployers()
{
return new Employer[]{
new Employer{ Name="A", Id=1},
new Employer{ Name="B", Id=2},
new Employer{ Name="C", Id=3},
new Employer{ Name="D", Id=4},
new Employer{ Name="E", Id=5}
};
}
}
private void OnChangeNameSelection(object sender, SelectionChangedEventArgs e)
{
var data = this.FindResource("employers") as ObjectDataProvider;
var employers = data.Data as IEnumerable<Employer>;
var cmb = sender as ComboBox;
var selectedItem = this.gridEmployers.SelectedItem as Employer;
var employer = employers.FirstOrDefault(x => x.Name == (cmb.SelectedItem as Employer).Name);
if (employer != null) {
selectedItem.Id = employer.Id;
selectedItem.Name = employer.Name;
}
}
public class Employer : INotifyPropertyChanged
{
public string Name
{
get { return name; }
set
{
name = value;
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
public string name;
public int Id
{
get { return id; }
set
{
id = value;
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs("Id"));
}
}
}
public int id;
public event PropertyChangedEventHandler PropertyChanged;
}
public _2011_12_28_01()
{
InitializeComponent();
this.DataContext = new Employer[] { new Employer { Name = "A", Id = 1 } };
}
<DataGrid x:Name="gridEmployers" AutoGenerateColumns="False" ItemsSource="{Binding}" DataContext="{Binding}"> <DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Text="{Binding Name}"
IsEditable="True"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource employers}}"
SelectionChanged="OnChangeNameSelection"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<Window.Resources>
<ObjectDataProvider x:Key="employers" ObjectType="{x:Type local:_2011_12_28_01_Data}" MethodName="GetEmployers"/>
</Window.Resources>
public class _2011_12_28_01_Data
{
public IEnumerable<Employer> GetEmployers()
{
return new Employer[]{
new Employer{ Name="A", Id=1},
new Employer{ Name="B", Id=2},
new Employer{ Name="C", Id=3},
new Employer{ Name="D", Id=4},
new Employer{ Name="E", Id=5}
};
}
}
private void OnChangeNameSelection(object sender, SelectionChangedEventArgs e)
{
var data = this.FindResource("employers") as ObjectDataProvider;
var employers = data.Data as IEnumerable<Employer>;
var cmb = sender as ComboBox;
var selectedItem = this.gridEmployers.SelectedItem as Employer;
var employer = employers.FirstOrDefault(x => x.Name == (cmb.SelectedItem as Employer).Name);
if (employer != null) {
selectedItem.Id = employer.Id;
selectedItem.Name = employer.Name;
}
}
public class Employer : INotifyPropertyChanged
{
public string Name
{
get { return name; }
set
{
name = value;
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
public string name;
public int Id
{
get { return id; }
set
{
id = value;
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs("Id"));
}
}
}
public int id;
public event PropertyChangedEventHandler PropertyChanged;
}
public _2011_12_28_01()
{
InitializeComponent();
this.DataContext = new Employer[] { new Employer { Name = "A", Id = 1 } };
}