Вот мой сценарий - я работаю с SL3 (и WCF Data Services), и у меня есть настраиваемая форма, которая управляет сотрудниками. В форме у меня есть несколько простых TextBox (ов) и ComboBox (ов) для ввода основной информации для сотрудника. В моей архитектуре у меня есть несколько базовых классов, один для обработки коллекций объектов (реализованы ObservableCollection и INotifyPropertyChanged), а другой для Entity (ловит и вызывает OnPropertyChanged ("prop"). В моем коде за файлом (.cs) У меня есть обработчик событий, который обрабатывает _SelectedItemChanged () для ComboBox (ов), например, EmployeeType, где в базе данных значения могут быть как директор, персонал, репортер, менеджер и т. Д. Для столбца Код (другие столбцы) существуют в таблице EmployeeType, такой как Description, ModifiedDate и ID). У меня есть несколько конструкторов в моем элементе управления формой, и когда я загружаю форму с пустым конструктором и, таким образом, ничего не загружается (то есть способ, которым она должна загружаться и исправляться), все работает отлично, то есть я могу вводить данные, такие как FirstName (TextBox), HireData (TextBox) и EmployeeType (ComboBox). Проблема у меня возникает, когда я загружаю эту форму, и я знаю EmployeeType заранее, поэтому Я не знаю, как установить Se ComboBox lectedItem программно?
Я пытался что-то вроде этого, скажем, я хочу, чтобы форма загружала EmployeeType в качестве менеджера, поэтому у меня в методе Load ():
private SetEmployeeType()
{
var employeeType = new EmployeeType { Code = "Manager" };
this.EmployeeTypeComboBox.SelectedItem = employeeType;
}
Но когда я прослеживаю свой код (F5), я вижу employeeType как EmployeeType, но его свойства заполнены не полностью (все пустые, за исключением кода, как я явно назвал «Менеджер» выше), поэтому, когда мой _SelectedItemChanged ( ) вызывается событие .SelectedItem = null, и, таким образом, ComboBox загружается с ничего не выбранным (ItemSource привязан к списку, и он проходит правильно).
К вашему сведению, у меня есть другие методы, где я загружаю свой список EmployeeTypes, например GetEmployeeTypes (), и это прекрасно загружается. Если поле ComboBox пустое, а затем я выбираю значение, правильное значение отправляется в базу данных, но, как я уже заметил, иногда я хочу предварительно определить SelectedItem и, таким образом, отключить ComboBox, чтобы запретить пользователю вводить недопустимые данные.
Я даже попробовал немного LINQ, как это, и, кажется, не работает:
var type = from e in employeeTypeList // collection loads fine with 10 items
where e.Code = "Manager"
select e;
Когда я прослеживаю вышеупомянутый запрос, 'type' возвращается с правильным объектом EntityType со всеми заполненными свойствами (count = 1, что правильно), но, похоже, он не привязывается к ComboBox, так как SelectedItemChanged () ComboBox ожидает что-то вроде этого:
var employeeType = this.EmployeeType.SelectedItem as EmployeeType; // i.e. expecting EmployeeType
но вместо этого мой запрос LINQ возвращает значение, например:
IEnumerable<EmployeeType> // with some extra stuff...
PS. Я работаю из памяти, так как сейчас я дома, и это из моего кода на работе, поэтому, пожалуйста, извините, если я упускаю что-то очевидное. Я пробовал разные сценарии, и просто не могу понять это. Заранее благодарим за любую помощь!