Wie kann ich einen Designer-Datenkontext für einen Stil angeben, damit Resharper meine Eigenschaften findet?

9

Oft binde ich die Eigenschaften IsExpanded und IsSelected eines TreeViewItems an mein Viewmodel. Dies ermöglicht beispielsweise, ein Element vorexpandiert zu machen, wenn der Baum geladen wird, oder ein Element zu erweitern, wenn es ausgewählt wird.

Das XAML sieht so aus:

%Vor%

Und mein Viewmodel könnte so aussehen:

%Vor%

Dies funktioniert in Ausführung und Designer einwandfrei, aber Resharper findet die ItemSelected- und ItemExpanded-Eigenschaften in den Bindungen nicht und unterstreicht sie als Warnung.
Ich kann verstehen, warum es sie nicht findet (ich habe nie "TestViewModel" als Datacontext-Typ für den Style angegeben), aber wie kann ich das beheben? Es gibt keinen Stil-Design-Datenkontext ...

UPDATE:

Das Problem hierbei ist, dass der Style in der TreeView definiert ist und dort der DataContext eindeutig auf ein TestViewModel gesetzt ist. Der Prüfer bekommt nicht, dass das, was ich style, ein TreeView Item ist und dieses Element einen DataContext von Test Item ViewModel (Type eines ItemsSource-Elements) hat.

Oh, und ich habe auch versucht, den Stil in TreeView.ItemContainerStyle statt TreeView.Resources zu setzen (hier sollte klar sein, dass der DataContext ein TextItemViewModel sein muss), aber das ändert nichts ...

    
JCH2k 19.01.2015, 14:58
quelle

2 Antworten

16

@ Lhildebrandt's Antwort ist im Allgemeinen richtig, aber in meinem Fall erzeugt diese Lösung Fehler, die das Anzeigen der Ansicht im Designer völlig unmöglich machen. Die Angabe von <d:Style.DataContext> innerhalb <Style> tag hat mir geholfen.

%Vor%

Auf diese Weise kann d:DataContext auch für Steuerelemente angegeben werden, und wir können Schnittstellen, verschachtelte Klassen und sogar Generics ohne Fehler bereitstellen: Ссылка

    
N. Kudryavtsev 09.10.2017, 01:23
quelle
1

Hast du es versucht:

%Vor%

Für mich sind die Eigenschaften hervorgehoben und werden mit IntelliSense in VS 2015 und R # 9 angezeigt.

Scheint eine identische Lösung für zu sein. Geben Sie datacontext type in der Listbox ItemContainer an mit Stil

    
lhildebrandt 05.10.2016 19:55
quelle

Tags und Links