J'ai une fenêtre nommée ParameterEditorView
avec ParameterEditorViewModel
comme DataContext
. Dans le ParameterEditorViewModel
j'ai une liste de ParameterViewModel
. Dans le ParameterEditorView
j'ai un ItemsControl
dont ItemsSource
est lié à la liste de ParameterViewModel
dans le ParameterEditorViewModel
. J'ai besoin du ParameterViewModel
pour avoir une référence à ParameterView (plus sur cela plus tard). Dans la section Resources
du ParameterEditorView
ajouter la DataTemplate
:Passer la vue à viewmodel avec datatemplate
<DataTemplate DataType="{x:Type my:ParameterViewModel}" >
<my:ParameterView HorizontalAlignment="Left"/>
</DataTemplate>
Alors, comment puis-je passer une référence du ParameterView
qui est créé pour montrer le ParameterViewModel
à elle?
La raison pour laquelle j'ai besoin du ParameterView
dans le ParameterViewModel
est la suivante: J'ai un TextBox
dont Text
propriété est binded à la propriété PropertyModelView.Name
. Mais je veux afficher une chaîne par défaut lorsque le Name
est vide ou nul. J'ai essayé de définir la valeur de propriété à la chaîne par défaut que je veux quand cela se produit mais le TextBox.Text
n'est pas défini dans ce scénario. Je fais quelque chose comme ceci:
private string _name;
public string Name
{
get { return _name; }
set
{
if (value == null || value.Length == 0)
Name = _defaultName;
else
_name = value;
}
}
J'ai aussi essayé de définir précisément le mode de liaison TextBox.Text
à TwoWay sans succès. Je pense que c'est un mécanisme de défense pour empêcher une boucle infinie de se produire mais je ne sais pas avec certitude. Toute aide sur ce front serait également très appréciée.
Merci, José Tavares
Eh bien, je ne me suis pas peut exprimer clairement. J'ai une fenêtre nommée ParameterEditorView et un ParameterEditorViewModel. Dans le ParameterEditorView j'ai une liste de ParameterViewModel. Dans le ParameterEditorView j'ai un 'ItemsControl' dont' ItemsSource' est lié à la liste de ParameterViewModel dans le ParameterEditorViewModel. Je définis également le 'DataTemplate' montré ci-dessus dans le ParameterEditorView. La liaison fonctionne correctement, mais je veux savoir si je peux passer la référence de ParameterView, qui est automatiquement créée pour afficher un ParameterViewModel, à ParameterViewModel. – jpsstavares
@jps en supposant que ParameterView est un UserControl. Si vous essayez de transmettre un morceau d'interface utilisateur à ViewModel ou à un modèle, vous faites quelque chose de mal.Je pense que ce serait à votre avantage d'exposer votre problème et de demander des solutions plutôt que d'aller dans la même direction que vous. FallbackValue est une option. J'ai édité pour ajouter une deuxième option. – Will
Je suppose que cette deuxième option est une bonne option pour surmonter le problème. Merci pour l'aide. – jpsstavares