You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:52:49