【实现效果】
【问题】handycontrol的CheckComboBox没有SelectedItems这一项:
当保存下来的选中项,需要在下次打开的时候加载,而handycontrol的CheckComboBox没有SelectedItems,
于是就先解决如何拿到绑定SelectedItems,通过附加属性的方式:
WPF 使用附加属性来绑定ListBox的SelectedItems - 只吃肉不喝酒 - 博客园 (cnblogs.com)参考这个帖子
但从实现效果上看,我的需求是:我保存下来的是什么顺序显示的就是什么顺序
这是我保存下来的顺序(SelectedItems的值)
重新打开读取后的SelectedItems值的顺序变成了ItemsSource给的值的顺序
//ItemsSource的值 FunctionComboBoxSource = new List<Function>() { new Function(){FunctionId="001",FunctionName="测直径"}, new Function(){FunctionId="002",FunctionName="测倒角"}, new Function(){FunctionId="003",FunctionName="测厚度"}, new Function(){FunctionId="004",FunctionName="正反面识别"}, new Function(){FunctionId="005",FunctionName="标定"}, new Function(){FunctionId="006",FunctionName="对位"}, };
然后我尝试调整SelectedItems里的项的顺序,发现如下:
最后细心观察,在进OnSelectedItemsChanged这个方法的时候,控件都没初始完,就是说在给SelectedItems赋值的时候ItemsSource还是空的,可能是因为这个原因导致add的时候加不进去数据,但数据后来又莫名奇妙有。
最后的解决办法就是:在控件加载完之后(即有了ItemsSource数据后),再给SelectedItems赋值:
//StationSettingView.xaml.cs public StationSettingView() { InitializeComponent(); this.Loaded += StationSettingView_Loaded; } //初始化完成后的方法 private void StationSettingView_Loaded(object sender, RoutedEventArgs e) { var viewModel = (StationSettingViewModel)this.DataContext; //去viewModel中赋值SelectedItems viewModel.LoadedCommand.Execute(); }
重要的一点:
// stat.LstFunction是SelectedItems的绑定数据,在viewModel的构造函数中要先不为空,否则OnSelectedItemsChanged这个方法进不去 stat.LstFunction= new ObservableCollection<Camera>();
标签:Function,handycontrol,CheckComboBox,FunctionName,SelectedItems,顺序,new,FunctionId From: https://www.cnblogs.com/moon-stars/p/18424154