Вот краткий пример того, что вы можете сделать.Сначала определите модели представлений, которые будут привязаны к DataGrid
.В идеале эти модели представлений должны вызывать PropertyChanged
или CollectionChanged
при изменении их свойств, но для этого простого примера это не требуется.
public class ViewModel
{
public List<ProjectRoleViewModel> ProjectRoles { get; set; }
}
public class ProjectRoleViewModel
{
public string Role { get; set; }
public string Employee { get; set; }
public List<string> OtherEmployees { get; set; }
public string SelectedOtherEmployee { get; set; }
}
Я жестко запрограммировал некоторые фиктивные значения, чтобы иметьданные в моделях представления:
var viewModel = new ViewModel
{
ProjectRoles = new List<ProjectRoleViewModel>
{
new ProjectRoleViewModel
{
Role = "Designer",
Employee = "John Smith",
OtherEmployees = new List<string> {"Monica Thompson", "Robert Gavin"}
},
new ProjectRoleViewModel
{
Role = "Developer",
Employee = "Tom Barr",
OtherEmployees = new List<string> {"Jason Ross", "James Moore"}
}
}
};
Затем эту модель представления необходимо назначить для DataContext
вашего Window
или UserControl
, который содержит DataGrid
.Вот XAML для DataGrid
:
<DataGrid
ItemsSource="{Binding ProjectRoles}"
AutoGenerateColumns="False"
>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Role}" />
<DataGridTextColumn Binding="{Binding Employee}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
ItemsSource="{Binding OtherEmployees}"
SelectedItem="{Binding SelectedOtherEmployee, UpdateSourceTrigger=PropertyChanged}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
После того, как пользователь выберет «другого» сотрудника, который может выполнять работу, модель вида 101 * будет иметь выбранное значение.В этом случае вам не понадобится какой-либо программный код, все содержится в моделях представления.