Как установить событие для выбора измененного списка данных?
Привет у меня есть проект wpf, который привязывает сетку данных к модулю, как это:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
Это отлично работает. Теперь я хочу добавить некоторые функции, включая настройку события в выпадающем списке. SelectionChanged
, Так что я изменил xaml
файл как это:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
/!-- Add an EventSetter here. -->
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="ValueChanged" />
</Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
И добавьте функцию в бэкэнд, как это:
private void ValueChanged(object sender, SelectionChangedEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox.SelectedItem != null)
{
//do something here.
}
}
Но это делает проект срывом с error: "The Application is in break mode."
когда я изменил ячейку со списком. Так в чем может быть проблема? Заранее спасибо!
2 ответа
Решение
Глупый как я. Просто установить событие внутри combobox
решить проблему.
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ValueChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Вам нужно установить Style
собственность ComboBox
на ваш Style
:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged" Handler="ValueChanged" />
</Style>
</ComboBox.Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
Или вы можете подключить обработчик событий непосредственно к ComboBox
элемент и избавиться от Style
:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Values}" SelectedItem="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ValueChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>