7
votes

Comment définir DataContext dans XAML en utilisant StaticResource

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 # xxx

xaml xxx


1 commentaires

Une fois que vous avez défini le window.datacontext dans xaml ( ) Vous ne devriez pas avoir à Définissez le DataContext sur la grille de données du tout.


3 Réponses :


9
votes

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>   


0 commentaires

1
votes

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 app.xaml code> p > xxx pré>

in app.xaml.cs code> p> xxx pré>

dans mes différents contrôler.xaml P>

<UserControl.DataContext>
    <Binding>
        <Binding.Source>
            <StaticResource ResourceKey="{x:Static app:App.MainVmResourceKey}" />
        </Binding.Source>
    </Binding>
</UserControl.DataContext>


0 commentaires

0
votes
<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.

4 commentaires

Y a-t-il des avantages à utiliser une ressource statique par rapport à la fenêtre window.datacontext 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}} .


@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.