.NET 6 WinUI 3社区工具包DataGrid复选框引发程序崩溃求助
ContentDialog中DataGridCheckBoxColumn导致重复打开崩溃问题排查
在页面中设置了按钮触发唤起的ContentDialog,向内部DataGrid添加DataGridCheckBoxColumn后出现异常崩溃:
- 添加1个DataGridCheckBoxColumn时,连续第4次打开对话框会在
ContentDialogResult result = await assignUsersContentDialog.ShowAsync();代码行崩溃 - 添加2个该列时,连续打开2次对话框就会崩溃
移除DataGrid的绑定或DataGridCheckBoxColumn后,崩溃问题不再出现,但两种情况下复选框均无法正常显示。怀疑是Microsoft的DataGridCheckBoxColumn存在问题,也可能是代码有疏漏,附上相关XAML及C#代码,请求协助排查崩溃原因。
页面XAML代码
<ContentDialog x:Name="ContentDialogTest" Width="1100" PrimaryButtonText="Accept" IsPrimaryButtonEnabled="True" PrimaryButtonClick="assignUsersContentDialog_PrimaryButtonClick" CloseButtonText="Cancel" > <StackPanel> <controls:DataGrid x:Name="dataGridTest" Margin="12" GridLinesVisibility="All" HorizontalGridLinesBrush="PowderBlue" VerticalGridLinesBrush="PowderBlue" BorderBrush="PowderBlue" ScrollViewer.HorizontalScrollBarVisibility="Auto" AutoGenerateColumns="False" ItemsSource="{x:Bind ViewModel.AssignUsersGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <controls:DataGrid.Columns> <controls:DataGridCheckBoxColumn IsReadOnly="True" Header="Add User" Width="75" /> <controls:DataGridCheckBoxColumn IsReadOnly="True" Header="Add User 2" Width="75" /> <!--a couple of DataGridTextColumns not shown--> </controls:DataGrid.Columns> </controls:DataGrid> </StackPanel> </ContentDialog>
唤起ContentDialog的按钮事件代码
private async void AddEditAssignUsers_Click(object sender, RoutedEventArgs e) { ViewModel.SetAssignUsersGrid(); ContentDialogResult result = await assignUsersContentDialog.ShowAsync(); }
绑定DataGrid的可观察集合初始化代码
private void SetAssignUsersGrid() { //Limit Global ProjectDbUser list to those from the current project IEnumerable<ProjectDbuser> projUsers = _UnitOfWorkDbGlobal.ProjectDbUsers.GetAllUsersFromProject(SelectedDataGrProj.ProjectDbguid); //limit UserAd to users not currenlty in the project IEnumerable<UserAd> userAds = _UnitOfWorkDbGlobal.UserAds.GetAll().Where(ad => !projUsers.Any(p => ad.UserAdguid == p.UserAdguid)).OrderBy(x => x.UserAddisplayName).ToList(); List<TempUser> assign = new List<TempUser>(); foreach (UserAd ua in userAds) { TempUser tu = new TempUser().Clean(); tu.Selected = false; tu.UserAdguid = ua.UserAdguid; tu.UserAddisplayName = ua.UserAddisplayName; tu.UserAdfirstName = ua.UserAdfirstName; tu.UserAdmiddleInitial = ua.UserAdmiddleInitial; tu.UserAdlastName = ua.UserAdlastName; assign.Add(tu); } AssignUsersGrid = new ObservableCollection<TempUser>(assign); }
内容的提问来源于stack exchange,提问作者E. A. Bagby
相关产品推荐
相关产品推荐

