gpt4 book ai didi

DataGrid.RowDetailsTemplate 内的 WPF DataGrid

转载 作者:行者123 更新时间:2023-12-04 10:00:27 29 4
gpt4 key购买 nike

我正在尝试在 WPF DataGrid 的 RowDetailsTemplate 中创建一个 DataGrid。

我有一系列工作。每个工作都可以分配一个或多个员工:

public class Job : _Base
{
private string _JobName = string.Empty;
public string JobName
{
get { return _JobName; }
set
{
if (_JobName != value)
{
_JobName = value;
RaisePropertyChanged("JobName");
}
}
}

private string _JobNumber = string.Empty;
public string JobNumber
{
get { return _JobNumber; }
set
{
if (_JobNumber != value)
{
_JobNumber = value;
RaisePropertyChanged("JobNumber");
}
}
}

private ObservableCollection<Employee> _Employees;
public ObservableCollection<Employee> Employees
{
get { return _Employees; }
set
{
if (_Employees != value)
{
if (_Employees != value)
{
_Employees = value;
RaisePropertyChanged("Employees");
}
}
}
}

public Job()
{
Employees = new ObservableCollection<Employee>();
}
}


public class Employee : _Base
{
private string _EmployeeName = string.Empty;
public string EmployeeName
{
get { return _EmployeeName; }
set
{
if (_EmployeeName != value)
{
_EmployeeName = value;
RaisePropertyChanged("EmployeeName");
}
}
}

private bool _IsChecked = false;
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (_IsChecked != value)
{
_IsChecked = value;
RaisePropertyChanged("IsChecked");
}
}
}
}

和我的 XAML:
<DataGrid ItemsSource="{Binding Jobs}"
AutoGenerateColumns="False">

<DataGrid.Columns>
<DataGridTextColumn Header="Job Name" Binding="{Binding JobName}" />
<DataGridTextColumn Header="Job Number" Binding="{Binding JobNumber}" />
</DataGrid.Columns>

<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Employees}"
AutoGenerateColumns="False">
<DataGridCheckBoxColumn Binding="{Binding IsChecked}"/>
<DataGridTextColumn Binding="{Binding EmployeeName}"/>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>

</DataGrid>

当我运行它并单击一行时,我得到:

使用 ItemsSource 时操作无效。使用 ItemsControl.ItemsSource 访问和修改元素

如果我删除内部网格的列定义,那么它不会出错。但随后它会自行生成列。我需要自己指定列。

这里有什么问题?

最佳答案

您需要正确定义内部数据网格的列

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="False">
<DataGridCheckBoxColumn Binding="{Binding IsChecked}"/>
<DataGridTextColumn Binding="{Binding EmployeeName}"/>
</DataGrid>

把这个变成

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsChecked}"/>
<DataGridTextColumn Binding="{Binding EmployeeName}"/>
</DataGrid.Columns>
</DataGrid>

基本上按照您的方式设置它是尝试在 xaml 中设置源,然后通过 ItemsSource 将其绑定(bind)到另一个源。这就是错误的来源。

关于DataGrid.RowDetailsTemplate 内的 WPF DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18970386/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com