Я работаю над WPF, используя шаблон MVVM.
У меня есть требование создать сетку данных с динамическими c столбцами. Первый столбец имеет тип datagridtextcolumn и должен содержать имена менеджера (этот столбец - stati c), но из второго столбца он имеет тип datagridcheckboxcolumn, и многие сотрудники могут сопоставляться с одним менеджером.
У меня есть три класса
- MainViewmodel
- ManagerViewmodel
- EmployeeViewmodel
Мой класс выглядит так
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.