我在从表格中显示数据时遇到了麻烦。该表有一个字段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显示空表。
谢谢你的帮助。
答案 0 :(得分:1)
PositionCollection
必须是公共属性,才能绑定到它:
public PositionCollection { get; private set; }
您还应该将Path
的{{1}}(而不是Binding
)设置为该媒体资源的名称:
Source