我正在尝试将类的ObservableCollection绑定到数据网格内的组合框。
public class ProductContainer
{
public string Product { get; set; }
public List<string> SubProducts { get; set; }
public ProductContainer()
{
SubProducts = new List<string>();
}
}
在我的MainWindow.xaml中,我有列表。
public ObservableCollection<ProductContainer> Products { get; set; }
我正在尝试使用我拥有的内容将它添加到数据网格的组合框中,但它没有正确绑定。 xaml会是什么样子?
<DataGrid AutoGenerateColumns="False" Name="ProductGrid" Width="Auto"
AlternatingRowBackground="LightSlateGray" SelectionMode="Single" SelectionUnit="FullRow" CanUserAddRows="True" CanUserDeleteRows="True" CurrentCellChanged="ProductGrid_CurrentCellChanged">
<DataGrid.Resources>
<DataTemplate x:Key="editProductTemplate">
<ComboBox x:Name="cbProducts" ItemsSource="{Binding Path=Products, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" SelectedItem="{Binding Product}" SelectedValuePath="Product" DisplayMemberPath="Product"/>
</DataTemplate>
<DataTemplate x:Key="editSubProductTemplate">
<ComboBox ItemsSource="{Binding Product.SubProducts, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn MinWidth="120"
Header="Product"
CellTemplate="{StaticResource editProductTemplate}" />
<DataGridTemplateColumn MinWidth="120"
Header="SubProduct"
CellTemplate="{StaticResource editSubProductTemplate}"/>
</DataGrid.Columns>
</DataGrid>
这是xaml。第一个组合框填充但第二个组合框永远不会根据第一个组合框填充,或者显示任何内容。
答案 0 :(得分:1)
取决于DataContexts。有关如何调试绑定see MSDN的信息,这总是有用的,并且有相关的问题可以帮助您构建正确的绑定和避免失败的绑定:
第二个ComboBox.ItemsSource
中的路径应该只是SubProducts
,因为对象的Product
属性只是一个字符串。此外,您的课程应该implement INotifyPropertyChanged
,以便可以通知用户界面任何更改。