为什么DataGrid不显示来自DB的数据

时间:2017-10-02 15:40:06

标签: c# wpf entity-framework mvvm datagrid

我在从表格中显示数据时遇到了麻烦。该表有一个字段PositionName,并在Entity Framework Code First中构建。用于显示我使用WPF和MVVM模式元素DataGrid。 xaml中的绑定代码:

<DataGrid AutoGenerateColumns="False" 
           x:Name="PositionGrid" Margin="2 2 2 2"
           ItemsSource="{Binding Source = PositionCollection}"                  
           SelectedItem="{Binding ThePosition, Mode=TwoWay}"
           SelectionMode="Single" Height="235">
     <DataGrid.Columns>
         <DataGridTextColumn Binding="{Binding PositionName}"
                             Header="Назва професії"/>
     </DataGrid.Columns>
</DataGrid>

窗口后面的代码

public AddPositionView()
{   
     InitializeComponent();
     DataContext = new PositionViewModel();
}

其中PositionViewModel是ViewModel并具有以下代码:

 public PositionViewModel()
 {
     _db = new SalDBContext();                         
     ThePosition = new Position();
     _poclog = new PositionLogic();    
     PositionCollection = new ObservableCollection<Position>(_poclog.Get());
 }

db是使用表格的上下文,ThePosition - 是模型类,_poclog它基本上是带有逻辑的类,用于处理表单。 Logic类具有显示数据的下一个实现。

 internal IEnumerable<Position> Get()
 {
     return _dbContext.Positions.ToList();
 }

代码无任何例外地工作,它显示表单但网格为空。虽然调试PositionCollection包含表中的所有元素。当它全部转到调用窗口的代码时,它显示空窗口。下一个代码后显示空窗口。

 private void PositionShow_Button_Click(object sender, RoutedEventArgs e)
 {
     AddPositionView posview = new AddPositionView();
     posview.Show();
 }

根据我在AddPositionView上设置停止点时的调试,它会抛出所有视图模型类,而PositionColection包含来自db的所有元素,但它会返回AddPositionView和{{1变为null。为什么会这样?而DataGrid显示空表。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

PositionCollection必须是公共属性,才能绑定到它:

public PositionCollection { get; private set; }

您还应该将Path的{​​{1}}(而不是Binding)设置为该媒体资源的名称:

Source