Silverlight и ComboBox: обходные пути ItemsSource и SelectedIndex - PullRequest
1 голос
/ 14 ноября 2011

У меня есть SL ComboBox, как показано ниже:

<ComboBox ItemsSource="{Binding UserList}" DisplayMemberPath="Name" />

где UserLists:

List<UserItem>

и каждый пользовательский элемент:

public class UserItem
{
  public int Code { get; set; }
  public string Name { get; set; }
}

Поскольку свойство ItemsSource установлено посредством Binding, как можно установить для свойства SelectedIndex значение ноль? Когда я пытаюсь установить это свойство, у меня исключение индекса из диапазона.

Моя цель - установить в качестве первого элемента UserList выбранный.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

Сделайте ваше UserList свойством зависимости и используйте опцию PropertyChangedCallback в DependencyProperty.Register().

public ObservableCollection<UserItem> UserList
{
   get { return (ObservableCollection<UserItem>)GetValue(UserListProperty); }
   set { SetValue(UserListProperty, value); }
}

public static readonly DependencyProperty UserListProperty = DependencyProperty.Register("UserList", typeof(ObservableCollection<UserItem>), typeof(MainPage), new PropertyMetadata((s, e) =>
{      
   cmbUserList.SelectedIndex = 0;
}));
1 голос
/ 15 ноября 2011

Используйте для этой цели свойство SelectedItem ComboBox. Xaml:

<ComboBox ItemsSource="{Binding UserList}" SelectedItem="{Binding SelectedUser, Mode=TwoWay}" DisplayMemberPath="Name" />

Посмотреть модель:

public ObservableCollection<UserItem> UserList { get; set; }

private UserItem _selectedUser;
public UserItem SelectedUser
{
   get { return _selectedUser; }
   set { _selectedUser = value; }
}

Для выбора первого пользователя в коллекции используйте команду:

//NOTE: UserList must not be null here   
SelectedUser = UserList.FirstOrDefault();
1 голос
/ 15 ноября 2011

Возможно, вы получаете индекс вне диапазона, потому что данные на самом деле не привязаны к тому времени, когда вы указываете индекс.К сожалению, похоже, что нет события data_loaded или подобного, которое позволило бы вам установить индекс, когда данные были связаны.

Не могли бы вы использовать источник данных, который понимает концепцию выбранного?Будет ли ComboBox уважать этот атрибут?

...