C# 当集合为空时,UWP XAML正在引发未处理的异常
我有两个C# 当集合为空时,UWP XAML正在引发未处理的异常,c#,xaml,data-binding,uwp,nullpointerexception,C#,Xaml,Data Binding,Uwp,Nullpointerexception,我有两个observateCollection,它与两个不同的ListViewUI绑定在一起 ObservableCollection<Department> deptList = new ObservableCollection<Department>(); ObservableCollection<Teacher> teacherList = new ObservableCollection<Teacher>(); 异常消息 Message
observateCollection
,它与两个不同的ListView
UI绑定在一起
ObservableCollection<Department> deptList = new ObservableCollection<Department>();
ObservableCollection<Teacher> teacherList = new ObservableCollection<Teacher>();
异常消息
Message=“检测到布局周期。布局无法完成。\r\n检测到布局周期。布局无法完成。”
_message=“布局GUI时发生循环。”
以下是ListView
UI的代码块-
<ListView Header="Department List"
x:Name="depertmentList"
ItemsSource="{x:Bind deptList}"
SelectionMode="Multiple"
SelectionChanged="depertmentList_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Department">
<StackPanel Margin="1">
<TextBlock Text="{x:Bind Dept}" Margin="1"/>
<TextBlock Text="{x:Bind SemesterCount}" Margin="1"/>
<TextBlock Text = "{Binding Courses, Converter={StaticResource ListToStringConverter}}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView Header="Teacher List"
x:Name="teacherListView"
ItemsSource="{x:Bind teacherList}"
SelectionMode="Single"
SelectionChanged="teacherListView_SelectionChanged"
Margin="2">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Teacher">
<StackPanel>
<TextBlock Text="{x:Bind Name}"/>
<TextBlock Text="{x:Bind Designation}" Margin="1"/>
<TextBlock Text="{x:Bind Dept}" Margin="1"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
C#事件代码
private void depertmentList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (depertmentList.SelectedItem == null)
{
removeDept.IsEnabled = false;
teacherListView.ItemsSource = teacherList;
}
else
{
removeDept.IsEnabled = true;
ObservableCollection<Department> t = new ObservableCollection<Department>();
Department temp = (Department)depertmentList.SelectedItem;
teacherListView.ItemsSource = from teacher in teacherList
where teacher.Dept == temp.Dept
select teacher;
}
}
private void teacherListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (teacherListView.SelectedItem == null)
{
removeTeacher.IsEnabled = false;
}
else
{
removeTeacher.IsEnabled = true;
}
}
private void depentmentlist\u SelectionChanged(对象发送者,selectionchangedventargs e)
{
如果(depertmentList.SelectedItem==null)
{
removeDept.IsEnabled=false;
teacherListView.ItemsSource=teacherList;
}
其他的
{
removeDept.IsEnabled=true;
ObservableCollection t=新的ObservableCollection();
部门温度=(部门)DepartmentList.SelectedItem;
teacherListView.ItemsSource=来自teacherList中的教师
其中教师部门==临时部门
选择教师;
}
}
private void teacherListView\u SelectionChanged(对象发送者,SelectionChangedEventArgs e)
{
如果(teacherListView.SelectedItem==null)
{
removeTeacher.IsEnabled=false;
}
其他的
{
removeTeacher.IsEnabled=true;
}
}
需要注意的是,教师
班级来源于部门
班级。如果我撤销一个系,所有与该系相关的老师也会被撤销
为了防止应用程序崩溃,我不得不在列表中添加一个硬编码的垃圾项,用户可以在运行时删除该项
同样,如果其中一个列表为空,应用程序将崩溃。但如果两个列表中至少有一项,则不会发生任何事情
现在,我的问题是如何在不添加任何类型垃圾项的情况下解决此问题?即使列表为空或空,我也要防止崩溃。您得到的错误有点模糊。您的问题,虽然不可能在不设置calm和c#的情况下进行调试,但却是这方面的一个变体 当一个或另一个列表为空时,就会发生某种异常。您是否有任何linq查询假设会返回某些内容?你到底有没有接触过那些东西
问题只是说UWP试图在一个无限循环中重建您的UI,发生了一些不好的事情,它会重试。这就是应用程序崩溃的原因。因为无限循环。如果您在ListView中使用了scrollviewer,或者您可以在列表中没有项目时遍历项目 这篇文章讨论了同样的问题 希望这有帮助 如果你发布你的xaml代码,它将有助于诊断你的问题
谢谢。这看起来像是一个内部布局设计。问题是ScrollViewer导致循环渲染。您可以设置scrollViewer的高度。例如:
<ScrollViewer Margin="2" RelativePanel.Below="TeacherFilter" Height="100">
或者作为@Noorul共享,将垂直滚动条可见性设置为自动
<ScrollViewer Margin="2" RelativePanel.Below="TeacherFilter" VerticalScrollBarVisibility="Auto">
我也在第二块代码中添加了异常。我找到了App.g.I.cs文件中的行。对不起,这没有帮助。将鼠标悬停在UnhandledException+=(发送方,e)中的“e”上,然后获取确切的异常。这无疑会有所帮助。Message=“检测到布局周期。布局无法完成。\r\n检测到布局周期。布局无法完成。”{Windows.UI.Xaml.UnhandledExceptionEventArgs}\u Message=“布局GUI时发生了一个周期。”希望这些帮助。当选择与部门绑定的ListView项目时,我有一个LINQ操作。你是对的。这都是关于布局渲染的。制造无用的灾难。它已经毁了我一整天对后端代码的思考。
<ScrollViewer Margin="2" RelativePanel.Below="TeacherFilter" VerticalScrollBarVisibility="Auto">