WPF,这个DataGrid数据绑定哪里出错了?
<Grid>
<DataGrid Name="datagrid1" Margin="148,68,0,0" AutoGenerateColumns="False" Height="131" Width="244">
<DataGrid.Columns>
<DataGridTextColumn Header="科室" Width="105" Binding="{Binding Path=Name}" />
<DataGridTextColumn Header="人数" Binding="{Binding Path=Number}" />
<DataGridComboBoxColumn ItemsSource="{Binding Path=People}" SelectedItemBinding="{Binding Path=K_科长}"
Header="科长" />
</DataGrid.Columns>
</DataGrid>
</Grid>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<Company> obc = new ObservableCollection<Company>();
obc.Add(new Company() { Name = "人教科",Number=2,K_科长="熊俊",People=new List<string>(){"熊俊","王晓"}});
obc.Add(new Company() { Name = "广告科", Number = 2, K_科长 = "汤姆", People = new List<string>() { "汤姆", "杰克" } });
obc.Add(new Company() { Name = "财会科", Number = 2, K_科长 = "李莹", People = new List<string>() { "李莹", "张三" } });
obc.Add(new Company() { Name = "人教科", Number = 4, K_科长 = "李刚", People = new List<string>() { "李刚", "王二","牛熊","刘麻子" } });
datagrid1.ItemsSource = obc;
}
}
class Company
{
public string Name { get; set; }
public int Number { get; set; }
public string K_科长 { get; set; }
public List<string> People { get; set; }
}
上面代码,DataGridComboBoxColumn列绑定到Pelple属性,可是为什么结果这一列没有显示呢?
[解决办法]
List<string> People 不能直接绑定到DataGridComboBoxColumn列绑定到Pelple属性
需求转换成字符串
[解决办法]
这个问题我当初也遇到过。
问题是你的People里面的数据和“K_科长”的数据不是同一个引用所以绑定不会出现你希望的选择项。
你可以新建一个People类,并重载Equals,重载的目的是wpf会调用Equals比较并选择目标项。
class People
{
pubic string Name{set;get;}
public override bool Equals(object obj)
{
if (this == obj) return true;
if (obj == null
[解决办法]
this.GetType() != obj.GetType())
{
return false;
}
People p = obj as People;
if(p=null) return false;
return this.Name == obj.Name;
}
}
[解决办法]
没有设置SelectedValuePath与DisplayMemberPath
[解决办法]
很抱歉,是我没看清楚。
你这个问题应该出在ItemsSource的绑定上。这个ItemsSource是一列的,如果你要为每一行提供不同的ItemsSource应该要做额外的处理
[解决办法]
为了弥补我看错了楼主的问题,经过搜索找到了解决楼主的问题方法。
使用模板列可以满足楼主的需求
<DataGridTemplateColumn Header="科长">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding People}" SelectedItem="{Binding Path=K_科长}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
[解决办法]
问题解决了吗?
[解决办法]
没有指—ataGrid对应的ItemsSource
[解决办法]
DataGridComboBoxColumn的ItemsSource是使用的外部设置的DataContext对象的属性进行绑定的,而不是每个Items对象的属性进行绑定的。