Domanda

Va bene sto cercando di capire WPF e il popolare modello MVVM.

Ora ho questo problema. Sto utilizzando un controllo nastro con diverse schede. Nel mio ViewModel ho una proprietà "ActiveTab (stringa)" che dovrebbe riflettere la scheda attiva.

Dato ribboncontrol non ha alcuna proprietà che mostra queste informazioni non possono legarsi ad esso.

Così ho pensato:

ho potuto legare l'evento selezionato in questo modo:

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

Poi nel codebehind impostare la proprietà nel ViewModel utilizzando ActiveTab = sender.Label

Ma poi mi avrebbe bisogno di un refference al mio ViewModel nel codebehind del mio punto di vista.

Sto cercando di risolvere questo problema senza l'utilizzo di alcun codice dietro file. (MVVM).

Ora la vera domanda: E 'in qualche modo possibile utilizzare un EventTrigger o EventSetter. che quando l'evento selezionato viene licenziato. Un setter imposta automaticly la proprietà ActiveTab al valore sender.Label?.

solo Usando XAML.

- Le mie scuse per il mio piuttosto male domanda inglese e forse noobish. Sono molto nuovo a WPF =)


UPDATE: Come ho appena scoperto, c'è una proprietà isSelected su una ribbonTab.

Ora ho alcuni problemi su come associare alla proprietà nel mio ViewModel.

Ho provato il seguente codice:

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

Ma questo non funziona:

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

SelectedTab offcourse è nel mio ViewModel e non in ribbonTab ...

Come posso fare il setter, impostare la proprietà sul mio ViewModel con il valore della scheda? =)

Grazie in anticipo !!

È stato utile?

Soluzione

Il rilascio di agosto della Microsoft Ribbon, il RibbonTab ha una proprietà IsSelected dipendenza, così si dovrebbe essere in grado di legarsi a questo.

Altri suggerimenti

Sono sorpreso che il RibbonControl non espone questa come una proprietà associabile, ma non ho davvero usato, quindi darò per scontato che tu abbia ragione ...

Si può fare solo attacchi da o verso una proprietà di dipendenza e se il nastro non ha una proprietà di dipendenza scheda attiva, allora avrete bisogno di fare uno voi stessi. O si può fare questo sottoclasse il controllo del nastro in uno dei vostri, aggiungendo la proprietà ad esso e con i gestori di eventi selezionati per aggiornare il suo valore. D'altra parte, se si sta utilizzando solo questo su una vista quindi è possibile aggiungere la proprietà alla vista, invece di sottoclassi il nastro e si legano a questo.

In entrambi i casi è necessario per ottenere la scheda correntemente selezionato nel motore di associazione per essere in grado di legarsi ad esso nulla (sia l'etichetta o il ViewModel) e si può solo andare nel motore attraverso proprietà di dipendenza. Quindi non sarà in grado di fare questo interamente in XAML, ma si sarà in grado di farlo senza introdurre l'accoppiamento tra la vista e il ViewModel.


Guardando la documentazione per il controllo del nastro Microsoft per WPF avete provato la proprietà Ribbon.SelectedItem? Sembra a me come dovrebbe dare la scheda selezionata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top