Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 绑定到实体数据库的DataGrid的ComboBox字段_Wpf_Database_Datagrid_Combobox_Entity - Fatal编程技术网

Wpf 绑定到实体数据库的DataGrid的ComboBox字段

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),

我想创建一个双向可编辑的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),
    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”
部分。再加上这一点,它应该是好的。