Laden...

Avalondock und MVVM Light - Title einer Avalondock Komponente wird nicht angezeigt

Erstellt von jump.sonic vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.554 Views
J
jump.sonic Themenstarter:in
24 Beiträge seit 2011
vor 7 Jahren
Avalondock und MVVM Light - Title einer Avalondock Komponente wird nicht angezeigt

Hallo Zusammen,

ich versuche gerade Avalondock und MVVM Light zusammen zu bringen.
Dazu habe ich einige Tutorials für MVVM und Avalondock gelesen und das Ganze eigentlich auch zum Laufen bekommen.
Ich habe nun das SimpleIoC von MVVM Light wieder eingeführt und dort gebe ich allen ViewModels eine Referenz zu einem IDataService mit.
Die Views und die Viewmodels werden auch alle richtig geladen und die Funktion ist auch gegeben.

Ich stehe vor dem Problem, dass z.B. der Title einer Avalondock Komponente nicht angezeigt wird.
Es wird ja ein DataTemplate und ein Style geladen.
Durch das Debugging konnte ich nun herausfinden, dass zwar der StyleSelector instanziert wird (Konstruktor wird erreicht), die Methode "SelectStyle" wird aber niemals aufgerufen.
Für das DataTemplate werden alle notwendigen Funktionen aufgerufen.
Das ist für mich ein Zeichen, dass die Einbindung von der Stylevorlage und damit auch des Titels nicht erreicht wird.

Hat hier jemand eine Idee woran das liegen könnte?

Vielen Dank im Voraus für die Unterstützung!

Martin

StyleSelector:


class PaneStyleSelector : StyleSelector
    {
        public PaneStyleSelector() { }

        public Style StartPageStyle { get; set; }

        public override System.Windows.Style SelectStyle(object item, System.Windows.DependencyObject container)
        {

            if (item is StartPageViewModel)
                return StartPageStyle;


            return base.SelectStyle(item, container);
        }
    }

Und das MainWindow mit dem Avalondockingmanager:

<avalonDock:DockingManager Name="dockManager"
                                   AnchorablesSource="{Binding Tools}"
                                   DocumentsSource="{Binding Files}"
                                   ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}"
                                   Grid.Row="1">
            <avalonDock:DockingManager.LayoutItemTemplateSelector>
                <pane:PanesTemplateSelector>
                    <pane:PanesTemplateSelector.StartPageViewTemplate>
                        <DataTemplate>
                            <view:StartPageView/>
                        </DataTemplate>
                    </pane:PanesTemplateSelector.StartPageViewTemplate>
                </pane:PanesTemplateSelector>
            </avalonDock:DockingManager.LayoutItemTemplateSelector>
            
            <avalonDock:DockingManager.LayoutItemContainerStyleSelector>
                <pane:PaneStyleSelector>
                    <pane:PaneStyleSelector.StartPageStyle>
                        <Style TargetType="{x:Type avalonDock:LayoutItem}">
                            <Setter Property="Title" Value="{Binding Model.Title}"/>
                            <Setter Property="ToolTip" Value="{Binding Model.StartPageTip}"/>
                            <Setter Property="CloseCommand" Value="{Binding Model.CloseCommand}"/>
                            <Setter Property="IconSource" Value="{Binding Model.IconSource}"/>
                            <Setter Property="ContentId" Value="{Binding Model.ContentId}"/>
                        </Style>
                    </pane:PaneStyleSelector.StartPageStyle>
                </pane:PaneStyleSelector>
            </avalonDock:DockingManager.LayoutItemContainerStyleSelector>
        </avalonDock:DockingManager>
5.658 Beiträge seit 2006
vor 7 Jahren

Hi jump.sonic,

hast du deinen StyleSelector mal ohne AvalonDock bzw. AvalonDock ohne deinen StyleSelector getestet? Damit hätte man evtl. einen Anhaltspunkt, an welcher Stelle man weitersuchen müßte.

Weeks of programming can save you hours of planning

J
jump.sonic Themenstarter:in
24 Beiträge seit 2011
vor 7 Jahren

Hi,

noch nicht wirklich. Ich hatte das alles so getestet bevor ich MVVM light wieder integriert habe.
Ich vermute, dass ich irgendwo ein Problem mit den aufgerufenen Kontruktoren habe.

Ohne MVVM light war der Aufruf für Avalondock:


ObservableCollection.Add(new StartPageViewModel());

Mit MVVM light hole ich mir jetzt die Instanz aus dem Locator:


ObservableCollection.Add(ServiceLocator.Current.GetInstance<StartPageViewModel>());

Ich denke hier liegt irgendwo das Problem.
Ich werde aber mal dein Rat befolgen und schauen ob ich den Styleselector außerhalb von Avalondock verwenden kann.

Gruß,
Martin