Je veux déclarer un DataContext via une ressource statique dans XAML comme une liaison pour les clients de la base de données Northwind. Je peux le faire facilement dans le code (C #) mais je veux apprendre à faire dans XAML. J'ai essayé tous les exemples que je peux trouver, mais aucun d'entre eux ne fonctionne pour moi. Je crois que la question est dans les deux lignes de code XAML que j'ai étiquetées [option1] et [option2]. Pouvez-vous clarifier ce que la syntaxe pour cela devrait vraiment être?
c # strong> p> xaml strong> p>
3 Réponses :
Si pour éviter de compléter la question avec les entités Cadre et MSSQL Northwind Base de données, la bonne illustration est fournie dans Exemple2 exemple de code de codeProject " Tutoriel de démarrage rapide WPF / MVVM "
Pour votre XAML, vous devez modifier le début de celui-ci à: p>
<StackPanel.DataContext> <local:CustomerViewModel /> </StackPanel.DataContext>
Je préfère définir la clé sous forme de chaîne statique - WPF a suffisamment de chaînes magiques sans virgule dans un coin de refactoring si vous pouvez facilement l'éviter.
dans in dans mes différents app.xaml code> p >
app.xaml.cs code> p>
contrôler.xaml P>
<UserControl.DataContext>
<Binding>
<Binding.Source>
<StaticResource ResourceKey="{x:Static app:App.MainVmResourceKey}" />
</Binding.Source>
</Binding>
</UserControl.DataContext>
<Window xmlns:vm="clr-namespace:YourApplication.ViewModels"> <Window.Resources> <vm:MainWindowViewModel x:Key="MWVM" /> </Window.Resources> <Window.DataContext> <StaticResource ResourceKey="MWVM" /> </Window.DataContext> </Window> Edit:Unlike the other answers, this one attempts to simply show you exactly how to define a ViewModel as a StaticResource in XAML and use that resource for a DataContext.
Y a-t-il des avantages à utiliser une ressource statique par rapport à la fenêtre window.datacontext code> directement? Sinon, alors Cette réponse suggère de la définir directement.
@Zevspitz - Oui, il existe un avantage lorsque vous liez une propriété à partir de votre point de vue principal (DataContext of Window), par exemple à un UserControl qui a sa propre viewModel. Si vous essayez de lier une propriété à partir du point de vue principal de l'UserControl de XAML, cela ne fonctionnera pas et vous obtiendrez même un avertissement. Donc, ce que vous avez à faire est de faire référence au point de vue principal. Comme ceci:
Pas assez de justification à mon esprit. Si vous avez besoin de vous inquiéter de cette affaire, vous pouvez utiliser {chemin de liaison = dataContext.title, Relativeource = {RelateSource Ancestortype = fenêtre}} code>.
@Zevspitz qui fonctionne certainement aussi. Cela nécessite simplement des liaisons plus longues et donne moins de flexibilité, si vous avez besoin de ce genre de chose.
Une fois que vous avez défini le
window.datacontext code> dans xaml ( window.datacontext> code>) Vous ne devriez pas avoir à Définissez le
DataContext code> sur la grille de données du tout.