2011-11-14 67 views
1

我有一個SL組合框類似如下:Silverlight和組合框:的ItemsSource及的SelectedIndex解決方法

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

其中用戶列表是:

List<UserItem> 

並且每個UserItem是:

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

由於ItemsSource屬性是通過Binding設置的,因此如何將SelectedIndex屬性設置爲零?當我嘗試設置此屬性時,我的索引超出範圍異常。

我的目標是設置爲所選用戶列表的第一項。

預先感謝您。

回答

1

您可能會得到一個超出範圍的索引,因爲在您指定索引時數據並未實際綁定。不幸的是,似乎沒有data_loaded事件或類似的數據綁定時允許您設置索引。

您能否使用理解所選概念的數據源? ComboBox會尊重這個屬性嗎?

+0

感謝您reply..What你的意思是數據源?你能給我提供更多信息嗎?再次感謝。 –

+0

您用於數據的對象。在這種情況下,你正在做清單<..>這是非常通用的。 ComboBox可以處理與舊的ComboBoxItem類似的不同類型嗎?或者,如果ComboBox允許您綁定到所選屬性的ItemsSource的屬性,只需將選定的屬性添加到您的UserItem類。 –

2

使您的UserList成爲依賴項屬性,並使用DependencyProperty.Register()中的PropertyChangedCallback選項。

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; 
})); 
+0

謝謝。你能否爲我提供正確的操作步驟?謝謝。 –

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(); 
相關問題