RibbonComboBox将其DataContext更改为{DisconnectedItem}

本文关键字:DisconnectedItem 将其 DataContext RibbonComboBox | 更新日期: 2023-09-27 17:51:06

我正在开发一个WPF项目,我正在试验一个非常奇怪的行为。

我已经添加了一个RibbonComboBox到Ribbon,里面有一个RibbonGallery,它有一个绑定到元素数组的RibbonGalleryCategory

<rb:RibbonComboBox Name="xComboBox" Label="List:" >
       <rb:RibbonGallery SelectedValue="{Binding SelectedValue, Mode=TwoWay}">
              <rb:RibbonGalleryCategory ItemsSource="{Binding List}" />
       </rb:RibbonGallery>
</rb:RibbonComboBox>

到目前为止一切都很好,当我运行程序时,RibbonComboBox按预期有它的项。

当我将容器窗口的大小调整到非常小的尺寸时,问题开始了,在这样做并调整大小后,ComboBox是!!

我不知道为什么会这样,我做错了什么吗?

我试着看看发生了什么,所以,我添加了一个事件到RibbonGalleryCategoryItems属性如下:

public RibbonView()
    {
        InitializeComponent();
        RibbonGallery gallery = xComboBox.Items[0] as RibbonGallery;
        RibbonGalleryCategory galleryCat = gallery .Items[0] as RibbonGalleryCategory;
        ((INotifyCollectionChanged)galleryCat.Items).CollectionChanged += new NotifyCollectionChangedEventHandler(RibbonView_CollectionChanged);
    }
    void RibbonView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        Dispatcher.BeginInvoke(new Action(() =>
            {
                switch (e.Action)
                {
                    case NotifyCollectionChangedAction.Add:
                        MessageBox.Show("Collection has changed >>>> Add");
                        break;
                    case NotifyCollectionChangedAction.Move:
                        MessageBox.Show("Collection has changed >>>> Move");
                        break;
                    case NotifyCollectionChangedAction.Remove:
                        MessageBox.Show("Collection has changed >>>> Remove");
                        break;
                    case NotifyCollectionChangedAction.Replace:
                        MessageBox.Show("Collection has changed >>>> Replace");
                        break;
                    case NotifyCollectionChangedAction.Reset:
                        MessageBox.Show("Collection has changed >>>> Reset");
                        break;
                }
            }), System.Windows.Threading.DispatcherPriority.Background, null);
    }
如您所见,我显示了集合中的变化,因此,在运行程序并调整窗口大小后,我的小测试告诉我集合是"reset"!!

有谁知道为什么会这样吗?如何防止RibbonComboBox丢失数据??

提前谢谢你。

编辑:

更多信息:我刚刚注意到一些东西,在调整容器窗口的大小后,RibbonComboBox将其数据上下文更改为一个名为" {DisconnectedItem} "的对象。我做了一些研究,发现了这个。但我仍然不知道如何防止它。

有没有人知道如何避免控件失去它的DataContext(这使得组合框失去它的数据)?

RibbonComboBox将其DataContext更改为{DisconnectedItem}

我意识到这个文档没有太多的提供,但看到Orion Edwards对这个链接底部的回答。

基本上是"戏剧性的事情发生了!"

也许就像他建议的那样,在重新调整列表大小后,从头开始重建列表将是一个技巧。

相关文章:
  • 没有找到相关文章