как получить TabHeader на триггере - PullRequest
0 голосов
/ 29 декабря 2010

У меня есть вкладка управления.я пытаюсь передать tabcontrol в качестве параметра, чтобы выяснить выбранный элемент вкладки, чтобы я мог получить имя заголовка вкладки.Связывание этого, похоже, не работает.идеи?

<TabControl Background="#FFF9F9F9" Height="650">
    <i:Interaction.Triggers>
        <i:EventTrigger  EventName="SelectionChanged">
            <n:ExecuteCommandAction Command="{Binding UpdateTabCommand}" Parameter="{Binding this}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

в моем конструкторе viewmodel у меня есть:

_updateTabCommand = new ActionCommand< TabControl>(UpdateTab);

закрытый метод:

public void UpdateTab(TabControl tabControl)
{
    var tabItem = (TabItem)tabControl.SelectedItem;

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

1) Используйте ElementName переплет.

Пример:

<TabControl Background="#FFF9F9F9"
            Height="650"
            Name="TabControl1">
    <i:Interaction.Triggers>
        <i:EventTrigger  EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding UpdateTabCommand}"
                                    CommandParameter="{Binding ElementName=TabControl1}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TabControl>

2) Использовать FindAncestor переплет:

Пример:

<i:Interaction.Triggers>
    <i:EventTrigger  EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding UpdateTabCommand}"
                                CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabControl}}" />
    </i:EventTrigger>
</i:Interaction.Triggers>
0 голосов
/ 29 декабря 2010

Прежде всего, в WPF нет такой вещи, как {Binding this}. Если вы хотите сослаться на элемент, для которого вы устанавливаете привязку, используйте RelativeSource привязка с режимом, установленным в Self .

Второе наблюдение. Передача элементов пользовательского интерфейса во ViewModel плохо пахнет (влияет на тестируемость, увеличивает связывание кода и, скорее всего, класс в конечном итоге нарушит более хорошие принципы проектирования ). Исправление действительно простое: просто привяжите TabControl.SelectedItem к полю в ViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...