Comment puis-je définir le DataContext sur ma grille en XAML, plutôt que dans le constructeur?Silverlight - Définition de DataContext en XAML plutôt qu'en constructeur?
Voici comment je le fais dans le constructeur (LayoutRoot est la grille XAML définie dans le XAML):
this.LayoutRoot.DataContext = this.HPVM;
Je préférerais le faire en plein XAML, mais je ne sais pas comment référence l'objet HPVM dans XAML. HPVM est une propriété publique de la classe USerControl.
Cela fonctionne bien comme indiqué ci-dessus, mais encore une fois, je veux juste savoir comment les propriétés de la classe UserControl en XAML, plutôt que de toujours avoir à le faire dans le code.
Voici tout le code correspondant:
<UserControl x:Class="SilverlightApplication1.SLHolePattern" x:Name="HolePatternsControl"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:controls="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls"
xmlns:local="clr-namespace:SilverlightApplication1"
xmlns:GeoPatterns="clr-namespace:GeoPatterns"
Height="700">
<UserControl.Resources>
...
Et voici mon constructeur où le DataContext est actuellement fixé:
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
}
Tout fonctionne très bien, mais je veux juste apprendre à définir le DataContext en XAML, pas en code.
Si j'instancie la classe ViewModel en XAML, puis-je toujours faire référence dans le constructeur code-behind? La raison pour laquelle je demande est que je définis actuellement certaines valeurs sur le ViewModel dans le constructeur avant que le formulaire est montré à l'utilisateur. – MattSlay
Oui, vous pouvez. Vous pouvez procéder comme suit: var aCustomer = this.Resources ["Cust"] en tant que client; aCustomer.Name = "abc"; – Klinger
J'ai oublié d'ajouter un attribut x: Name. x: La clé fonctionne au sein de XAML et x: Name rend l'objet visible au code. – Klinger