Как установить SelectedItem ComboBox программно через Silverlight? - PullRequest
0 голосов
/ 10 марта 2010

Вот мой сценарий - я работаю с 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. Я работаю из памяти, так как сейчас я дома, и это из моего кода на работе, поэтому, пожалуйста, извините, если я упускаю что-то очевидное. Я пробовал разные сценарии, и просто не могу понять это. Заранее благодарим за любую помощь!

Ответы [ 2 ]

2 голосов
/ 10 марта 2010

Звучит так, будто вы хотите установить выбранный элемент в качестве менеджера.

Если это так, вы хотите что-то вроде этого:

var type = (from e in employeeTypeList
    where e.Code = "Manager" 
    select e).FirstOrDefault();
EmployeeType.SelectedItem = type;

Ваш код создает список менеджеров, который, хотя и содержит только один элемент, не соответствует типу данных, ожидаемому SelectedItem. Решение этой проблемы состоит в том, чтобы просто извлечь один элемент из списка, используя FirstOrDefault, который выдаст первый элемент в списке, или ноль, если список пуст.

0 голосов
/ 10 марта 2010

Попробуйте установить режим TwoWay вместо Oneway, если вы его установили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...