Wpf 组合框未在datagrid中绑定
我有一个用字符串绑定到BindingList的组合框。它工作得很好Wpf 组合框未在datagrid中绑定,wpf,datagrid,combobox,datacontext,Wpf,Datagrid,Combobox,Datacontext,我有一个用字符串绑定到BindingList的组合框。它工作得很好 public BindingList<string> MyList { get { BindingList<string> list = new BindingList<string>(); list.Add("one"); list.Add("two"); list.Add("three");
public BindingList<string> MyList
{
get
{
BindingList<string> list = new BindingList<string>();
list.Add("one");
list.Add("two");
list.Add("three");
return list;
}
}
公共绑定列表MyList
{
得到
{
BindingList=新建BindingList();
列表。添加(“一”);
列表。添加(“两个”);
列表。添加(“三”);
退货清单;
}
}
xaml:
当我将相同的代码放入WPF 4 datagrid时,它不再工作(但datagrid外部的组合仍然运行正常):
为什么??谢谢因为在
数据网格
的情况下,组合框
具有不同的数据上下文
——网格行数据项,它没有MyList
属性
要解决此问题,可以使用RelativeSource
绑定到网格的DataContext
:
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="MyCmbBox" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.MyList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
谢谢。在谷歌搜索了4个小时后,你在7分钟内回答了。感谢you@o..o-不客气。将来,要捕获此类错误,请在调试器下运行应用程序,并在VisualStudio中查看输出窗口。您将在那里看到绑定错误。
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="MyCmbBox" ItemsSource="{Binding Path=MyList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="MyCmbBox" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.MyList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>