C# MVVM绑定问题
我的问题是:我有一个这样的学生班:C# MVVM绑定问题,c#,wpf,xaml,mvvm,datagrid,C#,Wpf,Xaml,Mvvm,Datagrid,我的问题是:我有一个这样的学生班: private int _id private string _name; private int _age; private ICollection<Grade> _grades; 我有一个类似这样的StudentVM文件,我没有用于评分的VM: private string _nameui; private int _ageui; 我有以下xaml文件: <Window x:Class="CodeFirstMVVM.App.M
private int _id
private string _name;
private int _age;
private ICollection<Grade> _grades;
我有一个类似这样的StudentVM文件,我没有用于评分的VM:
private string _nameui;
private int _ageui;
我有以下xaml文件:
<Window x:Class="CodeFirstMVVM.App.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:CodeFirstMVVM.App.ViewModels"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
mc:Ignorable="d"
DataContext="{Binding Source={StaticResource Locator}, Path=StudentView}"
Title="MainWindow" Height="500" Width="900">
<Grid>
<Canvas>
<TextBox Height="23" Canvas.Left="131" TextWrapping="Wrap" Canvas.Top="51" Width="283" Name="txtName" Text="{Binding NameUI}"/>
<TextBox Height="23" Canvas.Left="131" TextWrapping="Wrap" Canvas.Top="86" Width="283" Name="txtAge" Text="{Binding AgeUI}"/>
<DataGrid x:Name="dg01" ItemsSource="{Binding Entities, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedEntity}" CanUserAddRows="False" Canvas.Left="25" Canvas.Top="201" AutoGenerateColumns="False" IsReadOnly="True" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="200" />
<DataGridTextColumn Binding="{Binding Age}" Header="Age" Width="50" />
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding ElementName =dg01, Path=SelectedItem.Grades, Mode=TwoWay}" Canvas.Left="622" Canvas.Top="201" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding GradeValue}" Header="Grades"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Canvas>
</Grid>
</Window>
如您所见,有两个数据网格。第一个显示学生信息,第二个显示第一个数据网格中所选学生的成绩。我可以很容易地在文本框中看到学生信息,但我看不到所选学生的成绩。当我添加新等级时,我可以看到等级。但当我关闭并打开窗口时,我看不到以前输入的成绩。但我可以在数据库中看到它们。我想我在绑定分数方面做错了什么,但我不知道是什么。我怎样才能解决这个问题?谢谢。请同时提供ViewModel和Model。您是否可以查看Visual Studio的
输出
窗口在运行时是否出现任何错误?这将给我们提供更多的工作。@aevitas没有错误。您确定用分数项正确填充模型吗?如果中断执行,SelectedEntity.Grades
是否有任何元素?如何检查?我对这个有点陌生。。。在尝试使用该语言之前,您可以阅读教程以实际学习该语言。我假设你在学习开车之前不会尝试开车,那么编程有什么不同呢?
<Window x:Class="CodeFirstMVVM.App.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:CodeFirstMVVM.App.ViewModels"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
mc:Ignorable="d"
DataContext="{Binding Source={StaticResource Locator}, Path=StudentView}"
Title="MainWindow" Height="500" Width="900">
<Grid>
<Canvas>
<TextBox Height="23" Canvas.Left="131" TextWrapping="Wrap" Canvas.Top="51" Width="283" Name="txtName" Text="{Binding NameUI}"/>
<TextBox Height="23" Canvas.Left="131" TextWrapping="Wrap" Canvas.Top="86" Width="283" Name="txtAge" Text="{Binding AgeUI}"/>
<DataGrid x:Name="dg01" ItemsSource="{Binding Entities, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedEntity}" CanUserAddRows="False" Canvas.Left="25" Canvas.Top="201" AutoGenerateColumns="False" IsReadOnly="True" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="200" />
<DataGridTextColumn Binding="{Binding Age}" Header="Age" Width="50" />
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding ElementName =dg01, Path=SelectedItem.Grades, Mode=TwoWay}" Canvas.Left="622" Canvas.Top="201" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding GradeValue}" Header="Grades"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Canvas>
</Grid>
</Window>