MVVM WPF: Como reflejo de una propiedad de controles para el modelo de vista, cuando un evento se disparará

StackOverflow https://stackoverflow.com/questions/3708000

Pregunta

Está bien que estoy tratando de entender WPF y el popular patrón MVVM.

Ahora tengo este problema. Estoy usando un control de cinta con varias pestañas. En mi modelo de vista que tengo una propiedad "activeTab (cadena)", que debería reflejar la pestaña activa en ese momento.

Desde RibbonControl no tiene ninguna propiedad que muestra esta información no puede obligar a la misma.

Así que estaba pensando:

Me podría enlazar el evento seleccionado como esto:

        <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>

Luego, en codebehind establecer la propiedad en el modelo de vista mediante el uso de activeTab = sender.Label

Pero entonces necesitaría un refference a mi modelo de vista en el código subyacente de mi vista.

Estoy tratando de resolver este problema sin utilizar ningún código detrás de archivos. (MVVM).

Ahora la pregunta real: Es de algún modo posible utilizar un EventTrigger o EventSetter. que cuando el evento seleccionado es despedido. Un colocador establece automaticamente la propiedad activeTab al valor sender.Label?.

El uso de xaml solamente.

- Mis excusas por mi bien mala pregunta Inglés y tal vez noobish. Estoy muy nuevo en WPF =)


ACTUALIZACIÓN: Como acabo de descubrir, hay una propiedad isSelected en un ribbonTab.

Ahora tengo algunas cuestiones sobre la forma de obligar a la propiedad en mi modelo de vista.

Me trató el siguiente código:

<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>

Pero esto no funciona:

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

selectedTab offcourse está en mi modelo de vista y no en ribbonTab ...

¿Cómo puedo hacer que el organismo, establezca la propiedad en mi modelo de vista con el valor de la cuenta? =)

Gracias de antemano !!

¿Fue útil?

Solución

La liberación de agosto de la cinta de Microsoft, el RibbonTab tiene una propiedad de dependencia IsSelected, por lo que debe ser capaz de unirse a eso.

Otros consejos

Me sorprende que la RibbonControl no expone esto como una propiedad enlazable, pero realmente no he usado, así que se asumiré razón ...

Sólo se puede hacer fijaciones hacia o desde una propiedad de dependencia y si la cinta no tiene una propiedad de dependencia pestaña activa, entonces usted tendrá que hacer uno mismo. Usted puede hacer ya sea esta subclase el control de cinta en una de su propia, añadiendo a la propiedad y el uso de los controladores de eventos seleccionadas para actualizar su valor. Por otro lado, si sólo se utiliza este en una visión a continuación, puede añadir la propiedad a la vista en lugar de la subclasificación de la cinta y se unen a eso.

De cualquier manera que usted necesita para obtener la ficha seleccionada actualmente en el motor de enlace de poder nada se unen a ella (ya sea la etiqueta o el modelo de vista) y sólo se puede entrar en el motor a través de las propiedades de dependencia. Por lo que no será capaz de hacer esto en su totalidad en XAML, pero usted será capaz de hacerlo sin introducir el acoplamiento entre la vista y el modelo de vista.


En cuanto a la documentación para el control de cinta de Microsoft para WPF has necesitado la propiedad Ribbon.SelectedItem? A mi me parece como que debe darle la pestaña seleccionada en ese momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top