Может быть, это глупый (или более чем тривиальный) вопрос, но, похоже, я просто не знаю ответа. Вот случай -
- Я назначил
UserList
в качествеItemsSource
поля со списком. Итак, что я сделал, по сути, присвоил ссылочный тип другому. - Я очистил
UserList
. Итак, теперь я также получаюCount
изItemsSource
0. - Я все еще получаю элементы, присутствующие в моем поле со списком. И я также могу привести
SelectedItem
поля со списком к объектуUser
.
Вот полный код -
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public partial class MainWindow : Window
{
private List<User> _userList;
public MainWindow()
{
InitializeComponent();
_userList = new List<User>()
{
new User() {Id = 1, Name = "X"},
new User() {Id = 2, Name = "Y"},
new User() {Id = 3, Name = "Z"}
};
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.comboBox1.ItemsSource = _userList;
this.comboBox1.DisplayMemberPath = "Name";
}
private void button1_Click(object sender, RoutedEventArgs e)
{
_userList.Clear();
/* ItemsSource is cleared as well*/
IEnumerable userList = this.comboBox1.ItemsSource;
/*I can still get my User*/
User user = this.comboBox1.SelectedItem as User;
}
}
Итак, откуда берутся предметы? Что на самом деле происходит под капотом, когда я делаю такую привязку? Есть ли у элемента управления какой-то кеш? Королевская боль осознавать, что у тебя нет таких базовых идей. Кто-нибудь может объяснить закулисные детали?
EDIT: я написал код в WPF, но у меня есть тот же вопрос для WinForms Combobox
.
EDIT: Разве поле со списком не отображает элементы из памяти Datasource
? Когда этот источник данных содержит 0 элементов, как он отображает элементы?
Combobox
, и то, как он все еще удерживает элементы после очистки источника данных. - person atiyar   schedule 04.09.2012