C# 两个表的Wpf DataGridComboxColumn绑定?
我必须为书籍和出版社上课:C# 两个表的Wpf DataGridComboxColumn绑定?,c#,.net,wpf,datagrid,wpfdatagrid,C#,.net,Wpf,Datagrid,Wpfdatagrid,我必须为书籍和出版社上课: public partial class Books { public Books() { this.Authors = new ObservableCollection<Authors>(); } public int bID { get; set; } public string Title { get; set; } public int phID { get; set; }
public partial class Books
{
public Books()
{
this.Authors = new ObservableCollection<Authors>();
}
public int bID { get; set; }
public string Title { get; set; }
public int phID { get; set; }
public Nullable<short> PubYear { get; set; }
public Nullable<short> Edition { get; set; }
public virtual PublishingHouse PublishingHouse { get; set; }
public virtual ObservableCollection<Authors> Authors { get; set; }
}
public partial class PublishingHouse
{
public PublishingHouse()
{
this.Books = new ObservableCollection<Books>();
}
public int phID { get; set; }
public string Title { get; set; }
public string City { get; set; }
public virtual ObservableCollection<Books> Books { get; set; }
}
我有Datagrid,它向我展示了我所有的书:
<Window.Resources>
<CollectionViewSource x:Key="booksViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Books}, CreateList=True}"/>
<CollectionViewSource x:Key="booksAuthorsViewSource" Source="{Binding Authors, Source={StaticResource booksViewSource}}"/>
<CollectionViewSource x:Key="authorsViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Authors}, CreateList=True}"/>
<CollectionViewSource x:Key="publishingHouseViewSource" d:DesignSource="{d:DesignInstance {x:Type local:PublishingHouse}, CreateList=True}"/>
</Window.Resources>
<Grid DataContext="{StaticResource booksViewSource}" Margin="0,0,2,0">
<DataGrid ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="b ID" Binding="{Binding bID}"/>
<DataGridTextColumn Header="Title" Binding="{Binding Title}"/>
<DataGridTextColumn Header="#" Binding="{Binding Edition}"/>
<DataGridTextColumn Header="Year" Binding="{Binding PubYear}"/>
<DataGridComboBoxColumn x:Name="phIDComboBoxColumn" SelectedItemBinding="{Binding phID}" />
</DataGrid.Columns>
</DataGrid>
我想要的是,将PhidComboxColumn的默认值设置为取自一本书,但当我想要编辑它时,我想查看所有可用出版社的phId列表。我必须为两个数据源绑定“DataGridComboxColumn”吗?您的Book类应该有一个属性,包含所有可用发布库的phId列表,如下所示:
public ObservableCollection<int> PhIdList {get; set;}
编辑
如果我这样做的话,每本书的每一个对象都将包含相同的可用出版社的收藏。从记忆上看,这是非常不充分的。还有其他解决办法吗
为了防止数据冗余,如果您使用mvvm并获得如下组合框数据,则可以在父类(例如图书列表容器视图模型)中定义PhIdList:
<DataGridComboBoxColumn Header="PhIDs" SelectedItemBinding="{Binding phID}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding PhIdList}"/>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding PhIdList}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridComboBoxColumn
SelectedItemBinding="{Binding phID}" DisplayMemberPath="" >
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.BooksContainerVM.PhIdList, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.BooksContainerVM.PhIdList, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
假设在您的组合框中有一个出版社的phId列表,您选择例如phId3,如果必须从一本书中获取默认值,那么您希望选择哪本书?如果我这样做,我希望书的phId值将更改为phId3,每本书的每一个对象都将包含相同的可用出版社的收藏。从记忆上看,这是非常不充分的。还有其他解决办法吗?