WPF combobox связывание с внешним источником - PullRequest
0 голосов
/ 14 мая 2018

У меня проблема с привязкой данных на ComboBox. В выпадающем списке не отображаются изначально установленные элементы.

Мой .xaml:

<ComboBox 
    Name="LeaderTextBox" 
    Grid.Column="6" 
    Grid.Row="2"  
    MinWidth="150" 
    SelectedItem="{Binding Path=ProjectLeader}" 
    DisplayMemberPath="Name" Margin="5" 
    />

В коде я установил ItemSource следующим образом:

LeaderTextBox.ItemsSource = service.GetAllEmployee();

service.GetAllEmployee() возвращает список / массив сотрудников, и они также заполняются в поле со списком, что означает, что я могу их выбрать.

Моя проблема в том, что если у меня установлено значение ProjectLeader, то оно не отображается. Что мне там не хватает?


Модель для справки:

[Serializable]
[DataContract(Namespace = "Shared", IsReference = true)]
public class Employee
{
    public Employee()
    {
        this.Projects = new List<Project>();
    } 

    [DataMember]
    public int? ID { get; set; }

    [DataMember]
    public String Name { get; set; }

    [DataMember]
    public String JobDescription { get; set; }

    [DataMember]
    public String Department { get; set; }

    [DataMember]
    public String DirectDialing { get; set; }

    [DataMember]
    public bool Status { get; set; }

    [DataMember]
    public virtual Project LeaderOfProject { get; set; }

    [DataMember]
    public virtual List<Project> Projects { get; set; }

    public override string ToString()
    {
        return ID + " " + Name + " " + JobDescription + " " + Department + " " + DirectDialing;
    }


}
[Serializable]
[DataContract(Namespace = "Shared", IsReference = true)]
public class Project
{

    public Project()
    {
        this.EmployeesWorkingOnProject = new List<Employee>();
        this.ProjectSteps = new List<ProjectStep>();
    }

    [DataMember]
    public int? ID { get; set; }

    [DataMember]
    public String Titel { get; set; }

    [DataMember]
    public DateTime StartDate { get; set; }

    [DataMember]
    public DateTime EndDate { get; set; }

    [DataMember]
    public String Description { get; set; }

    [DataMember]
    public Employee ProjectLeader { get; set; }

    [DataMember]
    public bool Status { get; set; }

    [DataMember]
    public virtual List<Employee> EmployeesWorkingOnProject { get; set; }

    [DataMember]
    public virtual List<ProjectStep> ProjectSteps { get; set; }

    public override string ToString()
    {
        return ID +" "+ Titel+" "+StartDate+ " "+ EndDate +" "+ Description;
    }

}

1 Ответ

0 голосов
/ 14 мая 2018

Вы не можете выбрать элемент комбинированного списка по элементу, которого нет в комбинированном окне.

Справа:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var paul = new Employee { Name = "Paul" };
        LeaderTextBox.ItemsSource = new List<Employee>()
        {
            new Employee {Name = "Bob" },
            paul,
            new Employee {Name = "Alex" },
        };
        ProjectLeader = paul;
    }

Неправильно:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        LeaderTextBox.ItemsSource = new List<Employee>()
        {
            new Employee {Name = "Bob" },
            new Employee { Name = "Paul" },
            new Employee {Name = "Alex" },
        };
        ProjectLeader = new Employee {Name = "Paul" };
    }
...