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">