私は WPF プロジェクトを開発しており、非常に奇妙な動作を実験しています。
リボンに を追加しましたRibbonComboBox
。その内部には、要素の配列へのバインディングを持つ があります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が空になります!!
なぜこれが起こっているのかわかりません。何か間違ったことをしていますか??
何が起こっているのかを確認しようとしたので、次のようにの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 を失う (コンボボックスのデータが失われる) ことを回避する方法を知っている人はいますか?