編集:
答え:はい、あります。 Combobox_SelectionChanged
が発砲されるたびに、別のイベントハンドラが追加されたというエラーが見つかりました。そのため、コレクションはうまく見えましたが、Items_CollectionChanged
は複数回起動されました。これが修正されると、すべて正常に機能しました。
終了編集。Grid.Children.Clear()は実際にすべてのコントロールを削除しますか?
私はコンボボックスとグリッドのあるページを持っています。コンボボックスの選択が変更されると、グリッドが動的に塗りつぶされます。私は今、奇妙なことを観察している。コンボボックスで2回目の値を選択すると、グリッド内の子アイテムが2回表示されます。私は基になるコレクションをチェックしました。これは上手く見えます(アイテムごとに1つのレコードのみ)。 Grid.Children.Clear()
コマンドの後にcombobox_SelectionChangedメソッドから飛び出すと、画面が正常に表示されます(空の場合)。
私の推測では、Grid.Children.Clear()
はビジュアルツリーからコントロールを削除するだけですが、実際のコントロールはまだぶら下がっています。何か案は?
private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
grItems.Children.Clear();
grItemsColumnDefinitions.Clear();
grItemsColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(200) });
}
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
grItems.Children.Add(new ChildItemControl(e.NewItems[0]));
}
}
は興味があるだけ、あなたが使用することはできません理由がありますこれを手動でグリッドに追加するのではなく、バインドしますか? – Charleh
私はxamlスキルが欠けている理由の1つですが、もう1つは、構造自体が表示される方法と同様に複雑であるということです。そこにいくつかの垂直と水平のレイヤーが追加されました(日、バイヤー、部門、aso)ので、コントロールがコードビハインドで追加されている場合は、扱いが簡単でした。 –
データの「構造」がデータ結合には複雑すぎるとは思わないでください。データが複雑になればなるほど、バインディングテンプレートよりもバックエンドロジックのミスを犯すことになりますので、データバインディングに依存する必要があります。 SOのドキュメンテーションセクションのMVVMサンプルを見てください:http://stackoverflow.com/documentation/wpf/2134/simple-mvvm-example#t=201607261427091123224 –