handycontrol的CheckComboBox的SelectedItems顺序

【实现效果】

【问题】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>();

 

posted @ 2024-09-21 16:21  春天花会开,  阅读(625)  评论(0)    收藏  举报