可能这是一个愚蠢的(或不仅仅是微不足道的)问题,但似乎我只是不知道答案。情况是这样的——
- 我分配了一个
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;
}
}
那么,这些物品是从哪里来的呢?当我进行这种绑定时,实际上会发生什么?控件是否有某种缓存?意识到没有这样的基本想法是一种皇家痛苦。谁能解释一下幕后细节?
编辑:我在 WPF 中编写了代码,但我对 WinForms 有同样的问题Combobox
。
编辑:组合框不是从它的内存中显示它的项目Datasource
吗?当该数据源包含 0 个项目时,它如何显示这些项目?