Контекстное меню с привязкой к данным не заполняет элементы при нажатии кнопки в строке сетки данных в wpf - PullRequest
0 голосов
/ 17 января 2019

У меня есть сетка данных, связанная с наблюдаемой коллекцией с именем ListOfEmployeeDetails. Сетка данных имеет три столбца, а именно: «Имя», «Дата рождения» и «Опыт». В каждой ячейке третьего столбца (т. Е. Опыта) я поместил кнопку, которая должна отображать список проектов, над которыми сотрудник работал в течение своего опыта.

Я не могу заполнить список проектов при нажатии кнопки в строке данных.

Вот что я пробовал:

EmployeeDetails.Xaml

<Datagrid ItemsSource="{Binding ListOfEmployeeDetails}">
  <DataGrid.Columns>
    <DataGridTemplateColumn Header="Name"/>
    <DataGridTemplateColumn Header="Date Of Birth"/>
    <DataGridTemplateColumn Header="Experience">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <Button 
            x:Name = "DropDownButton" 
            Tag="{Binding RelativeSource= {RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}},Path=DataContext}"                    
            Command="{Binding  Path=DataContext.LoadDropDownMenu,RelativeSource={RelativeSource FindAncestor, AncestorType= {x:Type DataGrid}}}"                                                                                                   
            CommandParameter="{Binding EmpId }">                     
            <Button.ContextMenu>
               //TODO: Need to display the list of Project Names for selected Employee ID
            </Button.ContextMenu>
          </Button>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>  
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</Datagrid>

EmployeeDetailsViewModel.cs

public class EmployeeDetailsModel
{
  public string EmpId { get; set; }
  public string EmpName { get; set; }
  public string EmpDOB { get; set; }
  public string EmpExperience { get; set; }
  public  ObservableCollection<ProjectModel> ListOfProjects { get; set; }
}

private ObservableCollection<EmployeeDetailsModel> _ListOfEmployeeDetails;          
public  ObservableCollection<EmployeeDetailsModel>  ListOfEmployeeDetails          
{
   get { return _ListOfEmployeeDetails; }
   set { SetProperty(ref _ListOfEmployeeDetails, value); }
}

public ICommand LoadDropDownMenu
{
  get { return new DelegateCommand(LoadProjectDetails); }
}

private void LoadProjectDetails(object obj)
{
  ListOfProjects.Clear();    
  foreach(var employeeDetail in ListOfEmployeeDetails)
  {
    if(employeeDetail.EmpId == obj.ToString())
    {
      ListOfProjects.Add(role);
    }       
  }  
}

public class ProjectModel
{
  public string ProjectName { get; set; }
  public string ProjectID { get; set; }
}

Какие изменения я должен сделать, чтобы заполнить список имен проектов в контексте меню. Любая помощь будет высоко ценится.

...