ばかげた(または些細な)ちょっとした質問かもしれませんが、答えがわからないようです。これがケースです-
- コンボボックスの
UserListとしてを割り当てました。ItemsSourceつまり、私が基本的に行ったことは、参照型を別の型に割り当てることです。 - をクリアしました
UserList。だから今私CountはItemsSource0のも取得します。 - コンボボックスにアイテムが残っています。
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個のアイテムが含まれている場合、どのようにアイテムを表示しますか?