Dans un contrôle IsSelected
propriété IsSelected d’un ItemContainer est IsSelected
propriété IsSelected
de mon ViewModel à l’aide de la syntaxe .
Cela fonctionne bien, mais je reçois un avertissement de Resharper:
Impossible de résoudre la propriété ‘IsSelected’ dans le contexte de données de type “FooSolution.BarViewModel”.
Comment spécifier un type de DataContext sur ListBox ItemContainer pour se débarrasser de cet avertissement?
Voici le code. J’ai une classe BarViewModel
:
public ObservableCollection FooItems { get;set; }
BarViewModel
est affecté à DataContext dans le Control qui contient le ListBox.
et FooViewModel
comme suit:
public bool IsSelected { get { return isSelected; } set { if (isSelected == value) { return; } isSelected = value; RaisePropertyChanged(() => IsSelected); } }
et XAML aiment ça:
Mise à jour J’ai essayé de définir d:DataContext
aide d’un setter, comme suggéré par HighCore, mais malheureusement, cela n’aide pas et même brise la construction:
(Lance: Erreur 1 La balise ‘DesignInstance’ n’existe pas dans l’espace de noms XML ‘schemas.microsoft.com/expression/blend/2008’. Ligne 31, position 50.)
Mise à jour 2 Enfin, la solution consiste à définir d:DataContext
sur l’élément de style lui-même (voir ma réponse ci-dessous):
Comme l’a souligné @HighCore, la solution consiste à spécifier l’atsortingbut d:DataContext
partir du kit de développement d:DataContext
SDK). Cependant, il ne fonctionne que lorsqu’il est défini sur un élément Style lui-même, et non dans le configurateur de propriété:
Cela supprime l’avertissement de Resharper et modifie également le chemin de liaison lorsque la propriété est rejetée sur le ViewModel. Cool!
La spécification de d:DataContext="{d:DesignInstance nmspc:Clz}"
avec d’autres atsortingbuts de balise Style
ne m’a pas aidée: R # / IntelliSense a vraiment arrêté de mettre en surbrillance les propriétés que je liais, mais le concepteur m’a également montré un message d’erreur au lieu de la vue .
L’astuce que j’ai découverte consiste à spécifier
dans la balise Style
. Et cela semblait si universel qu’il répond à une autre question, à propos de l’utilisation d’interfaces en tant que d:DataContext
.
Voici ma réponse à cette question avec un petit exemple: https://stackoverflow.com/a/46637478/5598194
utilisez d:DataContext
comme ceci:
Vous devez également append les éléments xmlns
suivants à l’élément racine:
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d"
Ajout aux réponses précédentes: pour se débarrasser de l’erreur
La propriété ‘DataContext’ n’est pas attachable aux éléments de type ‘Style’
append un espace de nom factice
xmlns:ignore="designTimeAtsortingbute"
et l’utiliser maintenant au lieu de d: DataContext