我有一个CombinBox绑定到BindingList与字符串。它工作正常。
public BindingList<string> MyList
{
get
{
BindingList<string> list = new BindingList<string>();
list.Add("one");
list.Add("two");
list.Add("three");
return list;
}
}
XAML:
<ComboBox x:Name="MyCmbBox" ItemsSource="{Binding Path=MyList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
当我将相同的代码放入WPF 4数据网格时,它不再起作用了(但是数据网格外的组合仍然运行正常):
<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>
为什么呢?谢谢
答案 0 :(得分:1)
因为如果DataGrid
ComboBox
具有不同的DataContext
- 网格行数据项,它没有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>