我在页面中有一个从按钮调用的内容对话框,当我向它添加
DataGridCheckBoxColumn
时,我注意到一些奇怪的崩溃行为。如果我添加一个DataGridCheckBoxColumn
,在我连续第四次打开内容对话框时,应用程序将在从按钮(见下文)调用的ContentDialogResult result = await assignUsersContentDialog.ShowAsync();
行崩溃。
但是,如果我添加两个
DataGridCheckBoxColumn
并连续打开内容对话框两次,它就会崩溃。如果我从数据网格中删除绑定或DataGridCheckBoxColumn
,它将不再崩溃。我怀疑这可能是因为微软的DataGridCheckBoxColumn
有问题,在任何一种情况下都不会显示复选框。
但也许我的代码以某种方式导致了崩溃。我看了一遍又一遍,找不到罪魁祸首,但也许你可以?
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>
显示内容对话框的按钮事件:
private async void AddEditAssignUsers_Click(object sender, RoutedEventArgs e)
{
ViewModel.SetAssignUsersGrid();
ContentDialogResult result = await assignUsersContentDialog.ShowAsync();
}
设置绑定到数据网格的可观察集合的代码:
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);
}