c# - 将动态 datagridcolumn 绑定到 itemssource 中的 obsevablecollection
问题描述
我正在使用 MVVM 模式处理 WPF。
我需要创建一个带有动态列的数据网格。第一列是 datagridtextcolumn 类型,应该包含经理姓名(此列是静态的),但从第二列开始,它是 datagridcheckboxcolumn 类型,许多员工可以映射到单个经理。
我有三个班
- 主视图模型
- 经理视图模型
- 员工视图模型
我的课是这样的
class mainViewmodel()
{
// to hold the managers
public observablecollection<ManagerViewmodel> Managers{get; set;}
}
class ManagerViewmodel()
{
//To hold the manager Names
Public string ManagerName{get; set;}
//To hold the list of employees
public observablecollection<employeeViewmodel> Employees{get;set;}
}
class employeeViewmodel()
{
// to hold a boolean value whether employee to reporting to manager
public bool IsReprting {get;set;}
}
in my main.XAML
<DataGrid x:Name="MyDataGrid" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" AutoGenerateColumns="False" IsEnabled="True" SelectionMode="Extended" SelectionUnit="Cell">
<DataGrid.Resources>
<Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#FFDEEAF6"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="0 0 1 1"/>
<Setter Property="Height" Value="auto"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn header = "Manager">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ManagerName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
in my main.CS
public main()
{
Initializecomponent();
MainViewmodel Main = MainViewmodel();
this.datacontext = Main;
//adding datagridcheckboxcolumns dynamically
for (int i = 0; i < Managers.employees.count; i++)
{
DataGridCheckBoxColumn checkBoxColumn = new DataGridCheckBoxColumn();
checkBoxColumn.Header = Main.Managers[i].ManagerName;
checkBoxColumn.IsReadOnly = false;
DG.Columns.Add(checkBoxColumn);
}
ListCollectionView listCollection = new ListCollectionView(Main.Managers);
this.MyDataGrid.ItemsSource = listCollection;
}
这里经理名称绑定在我的 xaml 代码中,现在我想将每个员工的 IsReporting 属性绑定到 datagridcheckboxcolumn 的每一行。
解决方案
推荐阅读
- opengl-es - 为什么在使用 gl.polygonOffset 时需要因子?
- python - 关于python数据库编程的查询
- angular - 如何从子组件中过滤父组件中的可观察对象?
- java - 错误:在类 testPackage.Method1 中找不到主要方法
- javascript - 获取 JS 中的所有 .m4a 文件
- python - 使用非 JSON 格式的表单数据抓取 ajax 调用
- javascript - Sticky Bootstrap 列应以父/内容结尾
- android - Android Studio 使用 Dagger 2 将依赖项注入到动态创建的片段中
- android - 从 Arduino 向 Android 发送数据不起作用
- python - 合并两列上的两个数据框