1

私は WPF プロジェクトを開発しており、非常に奇妙な動作を実験しています。

リボンに を追加しましたRibbonComboBox。その内部には、要素の配列へのバインディングを持つ がありますRibbonGalleryRibbonGalleryCategory

<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 に答える