当前位置: 首页 > 编程语言 > C#

如何在C#中更改ComboBox的itemsSource分享

时间:2023-04-10 18:27:40 C#

C#学习教程:如何在C#中更改ComboBox的itemsSource在这个问题中,我被告知要做,comboBox.itemssource...如果我需要做的就是创建一个新的组合框,然后在其上调用一个命令,那很好。但是,我需要通过xaml在我的用户控件中已经存在的组合框中执行此操作。在那种情况下,我该如何引用它?我知道如何绑定到控件中的属性,但在这种情况下,我需要获取整个控件。我是不是想多了?做我想做的最好的方法是什么?这就是我目前在组合框上切换集合的方式(这都是在模型级别)://组合框列表的属性publicObservableCollectionComboBoxList{get{return_comboBoxList;}set{if(Equals(value,_comboBoxList))返回;_comboBoxList=值;OnPropertyChanged("ComboBoxList");}}publicstringSelectedCommand{get{return_selectedCommand;}设置{_selectedCommand=值;NotifyPropertyChange(()=>SelectedCommand);if(SelectedCommand=="StringValue"){ComboBoxList=newObservableCollection(newList);}}}使用此实现时,会切换集合,但不会粘贴comboBox中的selectedItem。例如,当我单击不同的命令然后切换回来时,该框不再有selectedItem。更新我有一个名为selectedOperation的属性绑定到我的组合框。它包含一个带有NotifyPropertyChange的简单getter和setter。这使选中的框中的selectedItem保持不变。但是,如果用户单击另一个命令并在组合框中选择不同的项目,那么新项目将取而代之。我需要能够为组合框包含的每个集合设置一个selectedItem。例如:假设listBox中有2个命令,A和B。每个命令在comboBox中创建一个不同的集合。A创建一个数字集合,B创建一个名称集合。对于命令A,用户选择5。选择A时,组合框应显示5,因为它是selectedItem。A->5对于命令B,用户选择Roger。选择B时,组合框应显示“Roger”,因为它是所选项目。B->Roger目前,当用户在命令之间切换时,comboBox不会记住它的selectedItem。我宁愿使用DataContext并更新该源,也不愿手动更新ComboBox.ItemsSource属性。这完全消除了了解控件的需要。这里有一个小例子:当用户点击按钮时,你只需要更新数据,而不是更新数据。一些数据1一些数据2使用System.Collections.ObjectModel;使用System.Windows;namespaceWpfApplication10{//////MainWindow.xaml的交互逻辑///publicpartialclassMainWindow:Window{privatereadonlyObservableCollection_collection=newObservableCollection();publicMainWindow(){InitializeComponent();}publicObservableCollectionCollection{get{return_collection;}}privatevoidButton_Click(objectsender,RoutedEventArgse){_collection.Clear();for(inti=0;iupdate如果要使用新集合而不是删除项目,则必须为集合实现INotifyPropertyChanged。使用System.Collections.ObjectModel;使用System.ComponentModel;使用System.Runtime.CompilerServices;使用System.Windows;namespaceWpfApplication10{//////MainWindow.xaml的交互逻辑///publicpartialclassMainWindow:Window,INotifyPropertyChanged{privateObservableCollection_collection=newObservableCollection();publicMainWindow(){InitializeComponent();}publicObservableCollectionCollection{get{return_collection;}set{if(Equals(value,_collection))返回;_collection=价值;OnPropertyChanged();}}公共事件PropertyChangedEventHandlerPropertyChanged;privatevoidButton_Click(objectsender,RoutedEventArgse){Collection=newObservableCollection(new[]{"1","2"});}privatevoidButton_Click_1(objectsender,RoutedEventArgse){Collection=newObservableCollection(new[]{"3","4"});}protectedvirtualvoidOnPropertyChanged([CallerMemberName]stringpropertyName=null){PropertyChangedEventHandler处理程序=PropertyChanged;如果(处理程序!=null)处理程序(这个,新的PropertyChangedEventArgs(propertyName));注意:[CallerMemberName]将节省你在每次调用[CallerMemberName]时添加属性名称,但如果我没记错的话,它只适用于.NET4.5如果你不在.NET4.5下那么你有改为使用OnPropertyChanged("Collection")。参考:INotifyPropertyChanged此外,使用新集合更新集合,而不是_collection,否则您的UI将不会收到通知。编辑2您需要根据使用的集合跟踪所选项目。一些数据1一些数据2代码背后:usingSystem.Collections.Generic;使用System.Collections.ObjectModel;使用System.ComponentModel;使用System.Windows;namespaceWpfApplication10{publicpartialclassMainWindow{publicMainWindow(){InitializeComponent();MyCustomCollection1=newMyCustomCollection(new[]{"a","b"});MyCustomCollection2=newMyCustomCollection(new[]{"c","d"});}publicMyCustomCollectionMyCustomCollection1{得到;放;}publicMyCustomCollectionMyCustomCollection2{得到;放;}privatevoidButton_Click(objectsender,RoutedEventArgse){DataContext=MyCustomCollection1;}privatevoidButton_Click_1(objectsender,RoutedEventArgse){DataContext=MyCustomCollection2;}}publicclassMyCustomCollection:ObservableCollection{privateT_mySelectedItem;publicMyCustomCollection(IEnumerablecollection):base(collection){}publicTMySelectedItem{get{return_mySelectedItem;}set{如果(等于(值e,_mySelectedItem))返回;_mySelectedItem=值;OnPropertyChanged(newPropertyChangedEventArgs("MySelectedItem"));}}}}尝试使用一些触发器(可以是任何触发器数据/事件)通过样式更改集合这里是一个例子:以上是C#学习教程:如何在C#中更改ComboBox的itemsSource。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: