Wpf 绑定到实体数据库的DataGrid的ComboBox字段
我想创建一个双向可编辑的datagrid,其中包含一个组合框。 此datagrid连接到.NET实体框架。我怎么能这样做?你能扩展我的代码吗 SQL:Wpf 绑定到实体数据库的DataGrid的ComboBox字段,wpf,database,datagrid,combobox,entity,Wpf,Database,Datagrid,Combobox,Entity,我想创建一个双向可编辑的datagrid,其中包含一个组合框。 此datagrid连接到.NET实体框架。我怎么能这样做?你能扩展我的代码吗 SQL: CREATE TABLE Languages( L_Id INTEGER PRIMARY KEY IDENTITY(1,1), L_Name VARCHAR(16) NOT NULL ); CREATE TABLE Movies ( M_Id INTEGER PRIMARY KEY IDENTITY(1,1),
CREATE TABLE Languages(
L_Id INTEGER PRIMARY KEY IDENTITY(1,1),
L_Name VARCHAR(16) NOT NULL
);
CREATE TABLE Movies (
M_Id INTEGER PRIMARY KEY IDENTITY(1,1),
M_Title VARCHAR(128) NOT NULL,
M_Language_Id INTEGER NOT NULL,
CONSTRAINT MoviesToLanguages
FOREIGN KEY (M_Language_Id)
REFERENCES Languages (L_Id)
);
INSERT INTO Languages VALUES('subtitled');
INSERT INTO Languages VALUES('synchronized');
main window.xaml
...
<DataGrid Name="MoviesDataGrid" Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding Movies}">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding M_Title}" />
<DataGridTemplateColumn Header="Language" CanUserReorder="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextAlignment="Center" Text="{Binding Path=Languages.L_Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
???
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
...
。。。
???
...
CinemaViewModel.cs
private CinemaEntities _Entities;
public ObservableCollection<Movies> Movies{ get; private set; }
public CinemaViewModel()
{
_Entities = new CinemaEntities();
Movies = new ObservableCollection<Movies>(_Entities.Movies.Include("Languages"));
OnPropertyChanged("Movies");
}
private void Save()
{
_Entities.SaveChanges();
}
私有实体_实体;
公共可观测收集电影{get;private set;}
公共影院模型()
{
_实体=新实体();
Movies=新的ObservableCollection(_Entities.Movies.Include(“语言”));
OnPropertyChanged(“电影”);
}
私有void Save()
{
_Entities.SaveChanges();
}
在数据模板中:
<ComboBox ItemsSource="{Binding DataContext.Movies, RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}" SelectedItem="{Binding WhateverPropertyReferencesTheMovieNavigationPropertyInYourEntities}" DisplayMemberPath="WhateverPropertyInTheMoviesYouWantToVisualizeInTheComboBox"/>
我这样做了:但在尝试更改值后出现错误:addnew或edititem事务期间不允许延迟刷新有什么问题?我认为这与combobox无关。另外,如果要在组合框中显示语言,请将其ItemSource
设置为语言列表,而不是movies。此外,displaymemberpath应该是属性名,而不是绑定。现在,没有任何错误。但是组合框只工作了一半。我可以选择一个值,但之后会出现一个红色边框:viewmodel:LanguagesCollection=new ObservableCollection(_Entities.Languages);可能问题在于组合框设置了语言值(而不是id)。我如何解决这个问题?看起来不错,您只是缺少了SelectedValuePath=“Id”
部分。再加上这一点,它应该是好的。