我有一个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的第一项设置为选中。
提前谢谢。
答案 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();