1

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

我已将 a 添加RibbonComboBox到功能区,RibbonGallery其中有一个RibbonGalleryCategory具有与元素数组绑定的 a 。

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

到目前为止,一切正常,当我运行程序时,RibbonComboBox 具有预期的项目。

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

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

我试图看看发生了什么,所以,我在Items属性中添加了一个事件,RibbonGalleryCategory如下所示:

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);
    }

如您所见,我展示了集合中的变化,因此,在运行程序并调整窗口大小后,我的小测试告诉我集合已“重置”!

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

先感谢您。

编辑:

更多信息:我刚刚注意到一些事情,在调整容器窗口的大小后,RibbonComboBox 将其 DataContext 更改为一个名为“ {DisconnectedItem}”的对象。我做了一些研究,发现了这一点。但我仍然不知道如何防止它。

有谁知道如何避免控件丢失其 DataContext (这使组合框丢失其数据)?

4

1 回答 1

1

我意识到这个文档没有什么可以提供的,但是看到 Orion Edwards 在这个链接底部的回答。

基本上“发生了一些戏剧性的事情!”

正如他所建议的那样,也许在重新调整大小时从头开始重建列表将是诀窍。

于 2013-01-10T02:31:09.527 回答