MVVM WPF: отражение свойства элементов управления в модели просмотра при срабатывании событий

Хорошо, я пытаюсь понять WPF и популярный шаблон MVVM.

Теперь у меня есть эта проблема. Я использую ленточный элемент управления с несколькими вкладками. В моей ViewModel у меня есть свойство ActiveTab (string), которое должно отражать текущую активную вкладку.

Поскольку ленточный элемент управления не имеет свойства, отображающего эту информацию, я не могу к нему привязаться.

Итак, я подумал:

Я мог бы привязать выбранное событие следующим образом:

        <r:RibbonTab Label="tab1" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab2" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab3" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab4" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab5" Selected="RibbonTab_Selected"></r:RibbonTab>

Затем в выделенном коде установите свойство в модели просмотра с помощью Activetab = sender.Label

Но тогда мне понадобится ссылка на мою модель представления в коде моего представления.

Я пытаюсь решить эту проблему без использования кода файлов. (MVVM).

Теперь реальный вопрос: возможно ли каким-то образом использовать триггер события или средство задания событий. это когда запускается выбранное событие. Установщик автоматически устанавливает для свойства activetab значение sender.Label ?.

Только с использованием xaml.

- Мои извинения за мой довольно плохой английский и, возможно, нубический вопрос. Я новичок в wpf =)


ОБНОВЛЕНИЕ. Как я только что узнал, на ленте есть свойство isSelected.

Теперь у меня есть проблемы с тем, как привязать его к свойству в моей модели просмотра.

Я пробовал следующий код:

<Style TargetType="{x:Type r:RibbonTab}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="{Binding SelectedTab}" Value="{Binding RelativeSource=Self, Path=Label}" />
                    </Trigger>
                </Style.Triggers>
            </Style>

Но это не работает:

Error   1   Cannot find the Style Property 'SelectedTab' on the type 'Microsoft.Windows.Controls.Ribbon.RibbonTab'. 

SelectedTab offcourse находится в моей модели просмотра, а не в tapeTab ...

Как я могу сделать сеттер, установить свойство в моей модели просмотра со значением вкладки? знак равно

Заранее спасибо!!


person Community    schedule 14.09.2010    source источник


Ответы (2)


В августовском выпуске ленты Microsoft RibbonTab есть свойство зависимости IsSelected, поэтому вы должны иметь возможность выполнить привязку к нему.

person ozczecho    schedule 14.09.2010
comment
Боже, ты совершенно прав. Почему документация по ленте такая ограниченная ... :(. - person ; 15.09.2010

Я удивлен, что RibbonControl не раскрывает это как связываемое свойство, но я на самом деле не использовал его, поэтому предполагаю, что вы правы ...

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

В любом случае вам нужно передать текущую выбранную вкладку в механизм привязки, чтобы иметь возможность привязать к ней что-либо (либо метку, либо модель просмотра), и она может входить в механизм только через свойства зависимости. Таким образом, вы не сможете сделать это полностью в XAML, но вы сможете сделать это, не вводя связи между представлением и моделью представления.


Просматривая документацию для элемента управления лентой Microsoft для WPF, пробовали ли вы свойство Ribbon.SelectedItem? Мне кажется, что он должен показать вам текущую выбранную вкладку.

person Martin Harris    schedule 14.09.2010
comment
Вы оба совершенно правы, у меня есть свойство, которое можно привязать. Просто не нашла в документации: \ ... - person ; 15.09.2010