Silverlight和ComboBox:ItemsSource和SelectedIndex解决方法

时间:2011-11-14 19:56:25

标签: silverlight combobox itemssource selectedindex

我有一个SL ComboBox,如下所示:

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

其中UserLists是:

List<UserItem>

并且每个UserItem都是:

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

由于ItemsSource属性是由Binding设置的,如何将SelectedIndex属性设置为零?当我尝试设置此属性时,我的索引超出了范围异常。

我的目标是将UserList的第一项设置为选中。

提前谢谢。

3 个答案:

答案 0 :(得分:2)

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 :(得分:1)

您可能会使索引超出范围,因为在您指定索引时数据实际上并未绑定。不幸的是,似乎没有data_loaded事件或类似事件可以让你在绑定数据时设置索引。

您是否可以使用了解所选概念的数据源? ComboBox会尊重该属性吗?

答案 2 :(得分:1)

使用ComboBox的SelectedItem属性实现此目标。 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();