绑定DataGrid

时间:2014-06-27 08:55:33

标签: c# wpf entity-framework xaml datagrid

我使用Entity Framework和WPF创建了一个代码优先的C#项目。我创建了一个名为Personel Entity的实体。我将该Entity拖放到MainWindow但它没有显示任何数据。我想我必须在MainWindow.xaml.cs文件中做一些事情,但我不知道该怎么做。这是xaml中的DataGrid代码:

<DataGrid x:Name="personelEntityDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="19,259,18,10" RowDetailsVisibilityMode="VisibleWhenSelected">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="addressColumn" Binding="{Binding Address}" Header="Address" Width="SizeToHeader"/>
        <DataGridTextColumn x:Name="ageColumn" Binding="{Binding Age}" Header="Age" Width="SizeToHeader"/>
        <DataGridTextColumn x:Name="idColumn" Binding="{Binding Id}" Header="Id" Width="SizeToHeader"/>
        <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="SizeToHeader"/>
        <DataGridTextColumn x:Name="phoneNumberColumn" Binding="{Binding PhoneNumber}" Header="Phone Number" Width="SizeToHeader"/>
    </DataGrid.Columns>
</DataGrid>

以下是MainWindow.xaml.cs文件中的代码:

public partial class MainWindow : Window
{
    private PersonelContext _context = new PersonelContext();

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        System.Windows.Data.CollectionViewSource personelEntityViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("personelEntityViewSource")));    
    }
}

以下是PersonelContext.cs文件中的代码:

namespace Personel
{
    public class PersonelContext : DbContext
    {
        public DbSet<PersonelEntity> Personels { get; set; }
    }
}

代码中没有关于datagrid的其他内容。我知道我需要添加一些东西,但我不知道要添加什么。你能告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

基本上每个绑定都建立在特定DataContextFrameworkElement上。在您的情况下,它是DataGrid。由于您尚未初始化UseControl的数据上下文,因此未更新数据。
请不要将其与实体框架DbContext混淆,后者与控件DataContext无关。

因此,要使屏幕正常工作,只需在Window_Loaded方法中添加以下行:

this.DataContext = _context.Personels.ToList();

答案 1 :(得分:1)

在Xaml中进行一次更改,如下所示

ItemSource= {Binding}

to 

ItemSource= {Binding Path=.}

和代码背后的

personelEntityDataGrid.ItemSource =_context.Personels.ToList();

(如果以上不起作用,请尝试OR部分)。

personelEntityDataGrid.DataContext =_context.Personels.ToList();