ばかげた(または些細な)ちょっとした質問かもしれませんが、答えがわからないようです。これがケースです-
- コンボボックスの
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個のアイテムが含まれている場合、どのようにアイテムを表示しますか?