Je suis nouveau dans le modèle de conception MVVM, et je travaille sur un projet d'automatisation des processus d'expédition.Avoir du bon temps pour obtenir des valeurs de propriété d'objet dans des zones de texte
Le problème particulier que j'ai est que j'ai un UserControl (mon EditShipmentView) qui, quand il charge, assigne son ViewModel à son DataContext. ViewModel reçoit un ID d'enregistrement qu'il utilise pour extraire l'entité qui représente un envoi. Il le fait avec succès, comme je peux le voir dans Mole (visualizer). Ci-dessous un fragment XAML montrant le premier couple de TextBoxes, et ce à quoi je pensais que les liaisons devraient ressembler.
<local:SnazzyForm Background="#FF318AE1">
<Grid Margin="6,0,0,0">
<TabControl Style="{DynamicResource SnazzyTabControl}" TabStripPlacement="Left" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,0,0,50">
<TabItem Header="Overview" Style="{DynamicResource TransparentTabItems}">
<Grid Margin="6,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel DataContext="{Binding Path=ShipmentRecord}">
<TextBlock HorizontalAlignment="Left" Text="Contact Info" TextWrapping="Wrap" Style="{DynamicResource TitleText}"/>
<Path Fill="#FFFFB900" Stretch="Fill" HorizontalAlignment="Left" Width="200" Height="2" Data="M0,16.5 L278.5,16.5" Stroke="#FFFFB900"/>
<StackPanel Margin="0,10,0,0">
<Grid Margin="0,16,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".40*"/>
<ColumnDefinition Width=".60*"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Right" Text="Company" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource FieldLabel}" TextAlignment="Right" Margin="0,2,9,0"/>
<TextBox Text="{Binding Path=CompanyName, Mode=TwoWay, UpdateSourceTrigger=LostFocus, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1"/>
</Grid>
<Grid Margin="0,16,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".40*"/>
<ColumnDefinition Width=".60*"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Right" Text="Contact" TextWrapping="Wrap" VerticalAlignment="Top" Style="{DynamicResource FieldLabel}" TextAlignment="Right" Margin="0,2,9,0"/>
<TextBox Grid.Column="1" Text="{Binding Path=ContactName}" TextWrapping="Wrap" d:LayoutOverrides="Height"/>
</Grid>
Donc, pour récapituler ... EditShipmentView (Hérite de SnazzyForm) DataContext est EditShipmentViewModel EditShipmentViewModel.ShipmentRecord est peuplée (avec succès) avec un objet envoi de ShipmentRecord.CompanyName est une chaîne qui devrait évidemment renvoyer la nom d'une entreprise. Gardez à l'esprit ceci est seulement ma tentative la plus récente. Auparavant, je n'avais pas lié le Stackpanels DataContext et j'avais les Textboxes liées en tant que telles "{Binding Path = ShipmentRecord.CompanyName}", et ce qui semble être une centaine de variations différentes. Les poils qui me restent sont rapidement en train de reculer. S'il te plaît, pense à mes cheveux, envoie de l'aide.
Cory
Cela devrait fonctionner - avez-vous des erreurs de liaison de données dans la fenêtre Sortie? –
Je ne reçois aucune erreur de liaison de données dans la sortie. Au départ, c'était le cas, mais c'était parce que le chargement du disque était en train d'échouer silencieusement. Une fois corrigé, toujours pas de texte, et pas d'erreur pour me dire pourquoi. – CodeWarrior
Cory: Voir ma (nouvelle) réponse - c'est la chose principale que je peux penser, dans ce cas. –