Silverlight: impostazione di DataContext in XAML anziché nel costruttore?

Come posso impostare DataContext sulla mia griglia in XAML, anziché nel costruttore?

Ecco come lo faccio nel costruttore (LayoutRoot è la griglia XAML definita in XAML):

this.LayoutRoot.DataContext = this.HPVM; 

Preferirei farlo correttamente in XAML, ma non so come fare riferimento all’object HPVM in XAML. HPVM è una proprietà pubblica sulla class USerControl.

Funziona bene come sopra elencato, ma, ancora una volta, voglio solo sapere come proprietà della class UserControl in XAML, piuttosto che dover sempre farlo in codice.

Ecco tutto il codice pertinente:

    ... 

Ed ecco il mio costruttore in cui è attualmente impostato il DataContext:

 namespace SilverlightApplication1 { public partial class SLHolePattern : UserControl, INotifyPropertyChanged { public HolePatternsViewModel HPVM; public SLHolePattern() { InitializeComponent(); this.HPVM=new HolePatternsViewModel(); this.LayoutRoot.DataContext = this.HPVM; ...more code here } 

Funziona tutto bene, ma voglio solo imparare come impostare DataContext in XAML, non nel codice.

La risposta che Chris ha dato funziona bene. Ho provato e ha funzionato per me. È ansible creare un’istanza della class in XAML (all’interno di UserControl.Resources) e quindi associare il datacontext a una risorsa statica.

Segui il codice:

    DataContext="{StaticResource TheContext}" >    
    DataContext="{StaticResource TheContext}" >     

La seguente mostruosità funziona con Silverlight 4

  
    

provare qualcosa come questo …..

   

dove HPVM è un membro pubblico di questo -> tuo modulo ecc.

Crea l’istanza della tua class in xaml, aggiungendo qualcosa di simile alla sezione risorse …. (non dimenticare di aggiungere lo spazio dei nomi xmlns)

  

quindi, associa il contesto dei dati alla risorsa statica che hai appena aggiunto ….

    

In Silverlight 4, sono riuscito a farlo funzionare come segue:

Dare alla pagina / UserControl una x: Name = “myPage”

Nel tuo control binding usa la normale syntax bidimensionale dell’elemento. Nel mio caso voglio associare a una raccolta osservabile di oggetti nel mio codice dietro per la mia proprietà ItemsSource:

  

Non l'ho provato con DataContext, ma so che puoi eseguire il binding da elemento a elemento per DataContext mentre lo faccio per Grids il cui contesto è basato sull'elemento selezionato di qualche altro menu a discesa nella pagina.

Questo non è ansible (è ansible in WPF con {Binding RelativeSource={RelativeSource Self}} , ma Silverlight è più limitato.

Devi farlo attraverso il codice.