我按照一些在线教程在 ListView 的动态视图之间切换。在我的主窗口中,我在左窗格中有一个 ListView,其中包含子 ViewModel 列表的 ItemsSource。(每个子 ViewModel 实现一个接口)每个 ViewModel 都有自己的视图作为数据模板。我正在从 MainWindow 调用所选视图的 GenerateReport() 方法。但是所选视图的值变为空。从Github下载我的源代码。重现问题的步骤:运行应用程序并在学生报告的 ID 和名称中键入文本。(StudentReportViewModels 属性中的断点正确命中并更新了值。)然后单击生成报告按钮。StudentReportViewModels 的属性值变为空。如何解决这个问题?请帮忙。来源:MainWindow.xaml<Window.Resources> <DataTemplate DataType="{x:Type vm:StudentsReportViewModel}"> <view:StudentsReport/> </DataTemplate> <DataTemplate DataType="{x:Type vm:MarksReportViewModel}"> <view:MarksReport /> </DataTemplate></Window.Resources><Window.DataContext> <local:MainWindowViewModel/></Window.DataContext><Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="200"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <ListView ItemsSource="{Binding Reports}" SelectedItem="{Binding SelectedReport, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <ListView.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}"/> </DataTemplate> </ListView.ItemTemplate> </ListView> <GridSplitter Grid.Row="1" Grid.Column="1" Width="5" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch"/> <Grid Grid.Column="2"> <Grid.RowDefinitions> <RowDefinition Height="2*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> <ContentControl Content="{Binding SelectedReport.ViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> </ScrollViewer> <Button Content="Generate Report" Grid.Row="2" Margin="5" HorizontalAlignment="Right" Command="{Binding GenerateReportCommand}"/> </Grid></Grid>
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
您的 StudentsReport.xaml UserControl 绑定到在 XAML 中创建的 StudentsReportViewModel 实例:
<UserControl.DataContext>
<vm:StudentsReportViewModel/>
</UserControl.DataContext>
然而,“生成报告”按钮正在调用在 MainWindowVieModel 构造函数中创建并存储在 Report 类中的 StudentsReportViewModel 的另一个实例。
Reports = new List<Report>
{
new Report{ Name = "Students Report", ViewModel = new StudentsReportViewModel()},
new Report{ Name = "Marks Report", ViewModel = new MarksReportViewModel()}
};
您需要删除其中一个实例,以便将 UserControl 的 DataContext 绑定到您从中生成报告消息的同一视图模型实例。我建议从 StudentsReport.xaml 中删除这段代码:
<UserControl.DataContext>
<vm:StudentsReportViewModel/>
</UserControl.DataContext>
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消