MVVM WPF: Im Sinne eine Kontrollen-Eigenschaft auf das Ansichtsmodell, wenn ein Ereignis ausgelöst werden

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

Frage

Okay, ich versuche, WPF und das beliebte MVVM Muster zu verstehen.

Jetzt habe ich dieses Problem. Ich bin mit einer Band-Steuerung mit mehreren Registerkarten. In meinem Viewmodel habe ich eine Eigenschaft „ActiveTab (string)“, die den derzeit aktiven Tab widerspiegeln sollten.

Da Ribbon hat keine Eigenschaft, dass zeigt diese Informationen, die ich nicht an sie binden können.

Also ich dachte:

Ich konnte das ausgewählte Ereignis binden wie folgt aus:

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

Dann in Code-Behind setzen Sie die Eigenschaft in dem Ansichtsmodell unter Verwendung ACTIVETAB = sender.Label

Aber dann müsste ich eine refference meines Viewmodel in dem Code-Behind meiner Ansicht.

Ich versuche, dieses Problem zu lösen, ohne Code hinter Dateien. (MVVM).

Jetzt die eigentliche Frage: Ist es irgendwie möglich, einen Eventtrigger oder Eventsetter zu verwenden. dass, wenn wird das ausgewählte Ereignis ausgelöst. Ein Setter automaticly setzt die activetab Eigenschaft auf den Wert sender.Label?.

Mit XAML nur.

- Meine Entschuldigungen für meine eher schlecht Englisch und vielleicht noobish Frage. Ich bin sehr neu bei wpf =)


UPDATE: Wie ich gerade herausgefunden, gibt es eine isSelected Eigenschaft auf einem RibbonTab.

Jetzt habe ich einige Probleme, wie man die Eigenschaft in meinem Viewmodel binden es.

Ich habe versucht, den folgenden Code:

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

Aber das funktioniert nicht:

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

selectedTab offcourse ist in meinem Viewmodel und nicht in RibbonTab ...

Wie kann ich die Setter machen, setzen Sie die Eigenschaft auf meinem Viewmodel mit dem Wert der Registerkarte? =)

Vielen Dank im Voraus !!

War es hilfreich?

Lösung

Die Veröffentlichung August des Microsoft Ribbon, die RibbonTab eine IsSelected Abhängigkeitseigenschaft hat, so sollten Sie in der Lage sein, das zu binden.

Andere Tipps

Ich bin überrascht, dass die Ribbon aussetzen nicht dies als eine bindbare Eigenschaft, aber ich habe wirklich nicht daran gewöhnt, so dass ich Ihnen ist Recht annehmen würde ...

Sie können nur Bindungen tun eine Abhängigkeitseigenschaft oder aus, und wenn das Band werden Sie keine aktive Registerkarte Abhängigkeitseigenschaft haben, dann braucht man sich selbst zu machen. Sie können dies entweder tun, indem das Band Kontrolle in eine Ihrer eigenen Subklassen und fügte hinzu, das Eigentum zu ihm und mit den ausgewählten Event-Handler es den Wert zu aktualisieren. Auf der anderen Seite, wenn Sie mit dieser nur auf einen Blick, dann können Sie die Eigenschaft zu der Ansicht hinzufügen, anstatt das Band von Subklassen und binden sich an das.

Wie auch immer Sie die aktuell ausgewählten Registerkarte in die Bindung Motor bekommen müssen binden alles, um es in der Lage sein (entweder das Etikett oder das Viewmodel) und es kann nur den Motor über Abhängigkeitseigenschaften gehen. Sie werden also nicht völlig in XAML der Lage sein zu tun, aber Sie werden es tun können, ohne zwischen der Ansicht und Ansichtsmodell Kupplung eingeführt wird.


Mit Blick auf die Dokumentation für die Microsoft Ribbon Control für WPF haben Sie die Ribbon.SelectedItem Eigenschaft versucht? Es scheint mir, wie es sollten Sie die aktuell ausgewählte Registerkarte geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top