【问题标题】:WPF bind DataGrid column ComboBox from database table using idWPF 使用 id 从数据库表中绑定 DataGrid 列 ComboBox
【发布时间】:2019-04-15 17:36:37
【问题描述】:

我有课

[Table(Name = "Categories")]
class Category
{
    [Column(Name = "CategoryID", IsPrimaryKey = true, IsDbGenerated = true)]
    private int CategoryID { get; set; }
    [Column(Name = "Name")]
    public string Name { get; set; }
}

[Table(Name = "Products")]
class Product
{
    [Column(Name = "ProductID", IsPrimaryKey = true, IsDbGenerated = true)]
    public int ProductID { get; set; }
    [Column(Name = "CategoryID")]
    public int CategoryID { get; set; }
    [Column(Name = "Name")]
    public string Name { get; set; }
    [Column(Name = "Price")]
    public double Price { get; set; }
}

我需要使用 Products 中的 CategoryID 将 DataGrid 列创建为 ComboBox,并将所有类别从 Categories 中的 ComboBox 中进行编辑,我如何使用 DataContext 来制作它

【问题讨论】:

    标签: c# wpf xaml binding datacontext


    【解决方案1】:

    在这里,我在窗口级别创建了名称为 ProductSetListOfCategory 的产品和类别的 ObservableCollection

    public ObservableCollection<Category> ListOfCategory { get; set; }
    public ObservableCollection<Product> ProductSet  { get; set; }
    

    我在窗口后面的代码中创建了ObservableCollection,您可以在视图模型中创建它,这是更好的方法。

    我已将窗口命名为“Window1”x:Name="Window1"

    由于您需要绑定数据上下文,所以将elementBinding 与Window1 一起设置,并设置ItemsSource="{Binding ProductSet}"。所以这里发生的是ProuctSet 被搜索DataContext,然后在Window1 类中搜索。

    对于DataGridComboBoxColumn,使用样式设置ItemsSource,并使用相对源搜索具有ListOfCategoryDatagrid DataContext

    <DataGrid AutoGenerateColumns="False" x:Name="DataGrid1"
        HorizontalAlignment="Left" Height="135" Margin="21,288,0,0"
        VerticalAlignment="Top" Width="729"
        DataContext="{Binding ElementName=Window1}"
        ItemsSource="{Binding ProductSet}" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="ProductID" Width="175"
                Binding="{Binding ProductID}"/>
            <DataGridComboBoxColumn Header="Category"
                DisplayMemberPath="Name" SelectedValuePath="CategoryID"
                SelectedItemBinding="{Binding ListOfCategory}">
                <DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource"
                        Value="{Binding Path=DataContext.ListOfCategory,
                        RelativeSource={RelativeSource FindAncestor,
                        AncestorType={x:Type DataGrid}}}"/>
                    </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding
                        Path=DataContext.ListOfCategory,RelativeSource=
                        {RelativeSource FindAncestor,
                        AncestorType={x:Type DataGrid}}}"/>
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
            <DataGridTextColumn Header="Name" Width="175" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Price " Width="175"
                Binding="{Binding Price }"/>
        </DataGrid.Columns>
    </DataGrid>
    

    如果您要使用 View 模型进行绑定,则提供 Viewmodel 的类名称而不是元素绑定。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2016-04-30
      • 2023-02-07
      • 2011-02-28
      • 2020-01-30
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多