У меня есть элемент управления вкладки, которая выглядит следующим образом:SelectedIndex из обыкновение изменения TabControl в DataTrigger
<TabControl x:Name="tabControl1"
Margin="6,42,12,6"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TabControl.Style>
<Style TargetType="{x:Type TabControl}">
<Setter Property="SelectedIndex" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Test.IsStopped}" Value="True">
<Setter Property="SelectedIndex" Value="5"/>
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Style>
<TabItem...>
<TabItem...>
...
</TabControl>
IsStopped это свойство на ViewModel (реализует INotifyPropertyChanged и т.д.) Теперь, это все работает отлично, но есть улов. У меня также есть некоторый код, за такие вещи, как «Next» и «Назад» кнопки, увеличиваем индекс Язычок
private void NextButton_Click(object sender, RoutedEventArgs e)
{
int old = tabControl1.SelectedIndex;
try
{
tabControl1.SelectedIndex++;
}
catch (IndexOutOfRangeException)
{
tabControl1.SelectedIndex = old;
}
}
Если этот код не вызывается в любой момент, DataTrigger больше не обновляет SelectedIndex. Фон по-прежнему меняется на красный (только там, чтобы проверить привязку). Я понимаю приоритет ценности свойства зависимостей, но это раздражает, поскольку я, похоже, не контролирую происходящее. Что именно продолжается? В качестве бонусного вопроса я знаю некоторые отладочные трюки в WPF, но как я мог узнать, почему это не работает?
EDIT 10/8/2013 2:45 EST
Ну это интересно ... Я изменил событие NextButton_Click на следующее в маленькой попытке эмулировать то, что происходит, когда вкладка щелкнул:
private void NextButton_Click(object sender, RoutedEventArgs e)
{
int old = tabControl1.SelectedIndex;
try
{
TabItem nextItem = ((TabItem)tabControl1.Items[old + 1]);
nextItem.IsSelected = true;
}
catch (IndexOutOfRangeException)
{
tabControl1.SelectedIndex = old;
}
}
и все работает нормально. Кто-нибудь знает, есть ли причина, почему установка индекса явно показывает вышеупомянутое поведение?
Благодарим вас за советы. Я не заметил ничего другого между двумя событиями SelectionChanged, хотя я не удивился бы, если бы пропустил что-то. Похоже, что DataTrigger был в порядке. Побеспокоившись в SelectionChanged, я подумал, и я отредактирую свой пост с некоторой дополнительной информацией всего за секунду. – plast1k