WPF Tabcontrol datagrid
И так у меня есть Tabcontrol с несколькими tabitem на паре из них есть datagrid я хочу что бы при переключении на вкладку обновлялся грид (то что это нерентабельно и на 100 000 записей все повиснет меня не интересует сейчас хочу сделать так а потом посмотрим, могу и в отдельном потоке запустить)
Код:
<TabControl x:Name="Вкладки" >
<TabItem Name="вСписокКонтактов" GotFocus="вСписокКонтактов_GotFocus" Header="Список контактов">
<DataGrid Name="табКонтакты" GotFocus="табКонтакты_GotFocus" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="true" MouseDoubleClick="табКонтакты_MouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Номер"
Binding="{Binding Path=id,StringFormat={}{0:F0}}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Name="вСписокНовыхКонтактов" GotFocus="вСписокНовыхКонтактов_GotFocus" Header="Список новых контактов">
<DataGrid Name="табНовыеКонтакты" GotFocus="табНовыеКонтакты_GotFocus" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="true" MouseDoubleClick="табНовыеКонтакты_MouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Номер"
Binding="{Binding Path=id,StringFormat={}{0:F0}}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
<TabItem Name="вСписокКонтактов" GotFocus="вСписокКонтактов_GotFocus" Header="Список контактов">
<DataGrid Name="табКонтакты" GotFocus="табКонтакты_GotFocus" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="true" MouseDoubleClick="табКонтакты_MouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Номер"
Binding="{Binding Path=id,StringFormat={}{0:F0}}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Name="вСписокНовыхКонтактов" GotFocus="вСписокНовыхКонтактов_GotFocus" Header="Список новых контактов">
<DataGrid Name="табНовыеКонтакты" GotFocus="табНовыеКонтакты_GotFocus" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="true" MouseDoubleClick="табНовыеКонтакты_MouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Номер"
Binding="{Binding Path=id,StringFormat={}{0:F0}}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
Код:
MouseDoubleClick="табНовыеКонтакты_MouseDoubleClick"
первое что сделал это прописал простейшее событие дабе не распространялось пузырьком gotfocus
Код:
Private Sub табНовыеКонтакты_GotFocus(sender As System.Object, e As System.Windows.RoutedEventArgs)
e.Handled = True
End Sub
e.Handled = True
End Sub
Но оказываеться когда я выбираю вкладку мышью собираясь перейти на неё (клавой не пробовал да и пользователь в основном мышью будет пользоваться) событие так же возникает почемуто в grid-е а не во вкладке как я ожидал. При всем при том что в routedevents поля sourse и originalsourse идентичны тоесть событие всегда зарождается в гриде.
Как победить это уже второй день думаю, ну и само по себе мне нужно при активировании вкладки обновить грид и при двойном клике тоже должен выполниться код какой нибудь.
http://msdn.microsoft.com/ru-ru/library/system.windows.controls.tabcontrol.selectionchanged%28v=vs.95%29.aspx
Из SelectionChangedEventArgs можешь получить выбранный TabItem. А на нём найти свой DataGrid.