1

ちょっと、そこ!これが私の質問です:

WPFにDatagridがあり、DataGridComboBoxColumnである最初の列があります。

私がやりたいのは、コンボボックスを使用してその列のヘッダーを作成することです。つまり、列全体に伝播するようにヘッダーを変更します。

これは視覚的に行うことができますが、データを送信すると、Datagridにバインドされているリストに新しいコンボボックスの値が含まれません。

<dg:DataGridComboBoxColumn SelectedItemBinding="{Binding BIBStatus}"                                            
                           ItemsSource="{Binding Source={StaticResource typeStatus}}" 
                           Width="0.20*">
                    <dg:DataGridComboBoxColumn.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="Built-In Bridge"/>
                                <ComboBox SelectedItem="{Binding BIBStatus}" 
                                          SelectionChanged="ComboBox_SelectionChanged"
                                          ItemsSource="{Binding Source={StaticResource typeStatus}}"/>
                            </StackPanel>                                
                        </DataTemplate>
                    </dg:DataGridComboBoxColumn.HeaderTemplate>
                </dg:DataGridComboBoxColumn>

ComboBox_SelectionChangedには、次のコードがあります。

DataGridColumn comboCol = this.gridResults.Columns[0];

        for (int i = 0; i < this.gridResults.Items.Count; i++)
        {
            ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);

            myCmBox.SelectedValue = ((ComboBox)sender).SelectedValue;
        }

データを送信するときは、DataContextであるリストをDatagridに送信します。行をアドレス指定する最初の列の値を一度に変更すると、つまり、各行にコンボボックスがあるセルをクリックすると、値はDataContextのリストに伝播されますが、最初の列の値をヘッダーで変更すると、そうではありません。

誰かが私が欠けているものを教えてもらえますか?それが各行に影響を与える方法だと思いますが、SelectedValue、SelectedItem、SelectedIndexを試しました...すべて無駄になりました。

前もって感謝します...

4

1 に答える 1

0

私はそれを解決したかもしれないと思います...または少なくともそれを偽装しました...

DataGridColumn comboCol = this.gridResults.Columns[0];

        for (int i = 0; i < this.gridResults.Items.Count; i++)
        {
            ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);
            myCmBox.SelectedItem = ((ComboBox)sender).SelectedItem;
        }

        if (this._results != null)
        {
            foreach (Device device in _results)
            {
                device.BIBStatus = (TypeStatus)Enum.ToObject(typeof(TypeStatus), ((ComboBox)sender).SelectedValue);
            }
        }

データ コンテキストのみを変更して、双方向バインディングが機能することを期待しましたが、各行のコンボボックスに注目した場合にのみ機能しました。だから私は考えました:「なぜ両方の方法ではないのですか?」ご覧のとおり、各コンボボックスの選択項目と各デバイスの BIB ステータス (datacontext 部分) の両方を変更します。このようにして、望ましい効果が得られます。

ただし、この解決策が最善の解決策だとは思いません。悪党にならずにこれを実行できる方法があることを願っています。

どんな提案でも大歓迎です!

于 2009-07-28T19:08:17.520 に答える