10

コンボボックス列を持つデータグリッドがあります

<DataGridComboBoxColumn x:Name="DataGridComboBoxColumnBracketType" Width="70" Header="Tipo di staffa" SelectedValueBinding="{Binding type, UpdateSourceTrigger=PropertyChanged}">                    
            </DataGridComboBoxColumn>

ユーザーが値をコンボボックスに変更したときにのみ発生するイベントが必要です。どうすればこれを解決できますか?

4

3 に答える 3

16

CodePlex でこれに対する解決策を見つけました。これが、いくつかの変更を加えたものです。

<DataGridComboBoxColumn x:Name="Whatever">                    
     <DataGridComboBoxColumn.EditingElementStyle>
          <Style TargetType="{x:Type ComboBox}">
               <EventSetter Event="SelectionChanged" Handler="SomeSelectionChanged" />
          </Style>
     </DataGridComboBoxColumn.EditingElementStyle>           
</DataGridComboBoxColumn>

コードビハインドで:

private void SomeSelectionChanged(object sender, SelectionChangedEventArgs e)
{
     var comboBox = sender as ComboBox;
     var selectedItem = this.GridName.CurrentItem;

}
于 2014-01-20T15:25:25.263 に答える
5

また、CodePlex の @kevinpo によって提供された xaml コードと、David Mohundro のブログのヘルプをプログラムで使用します。

var style = new Style(typeof(ComboBox));
style.Setters.Add(new EventSetter(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(SomeSelectionChanged)));
dataGridComboBoxColumn.EditingElementStyle = style;
于 2016-08-12T08:54:07.517 に答える
3

Kevinpo の回答を完了するには、selectionChanged イベントが datagridcolumncombobox で 2 回トリガーされるため、コードの背後にある保護を追加する必要があります。

1) 最初のトリガー : 新しいアイテムを選択したとき

2) 2 番目のトリガー: 新しいアイテムを選択した後に他のデータグリッド列をクリックしたとき

問題は、選択した項目を変更していないため、2 番目のトリガーで ComboBox の値が null になることです。

private void SomeSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var comboBox = sender as ComboBox;
    if (comboBox.SelectedItem != null)
    {
        YOUR CODE HERE
    }
}

それが私の問題でした。他の誰かに役立つことを願っています!

于 2016-02-29T17:18:03.257 に答える