48 votes

Accès le code-behind de la variable dans le code XAML

Comment puis-je accéder variable publique qui, dans l'Échantillon.xaml.cs fichier comme asp.net <%=VariableName%> ?

Merci.

64voto

Robert Macnee Points 6998

Il ya quelques façons de le faire.

  • Ajouter votre variable comme une ressource à partir du code-behind:

    myWindow.Resources.Add("myResourceKey", myVariable);
    

    Ensuite, vous pouvez y accéder à partir de XAML:

    <TextBlock Text="{StaticResource myResourceKey}"/>
    

    Si vous devez l'ajouter après le XAML est analysée, vous pouvez utiliser un DynamicResource - dessus au lieu de StaticResource.

  • Faire de la variable une propriété de quelque chose dans votre XAML. Généralement cela fonctionne au travers de l' DataContext:

    myWindow.DataContext = myVariable;
    

    ou

    myWindow.MyProperty = myVariable;
    

    Après cela, quelque chose dans votre XAML peut y accéder par un Binding:

    <TextBlock Text="{Binding Path=PropertyOfMyVariable}"/>
    

    ou

    <TextBlock Text="{Binding ElementName=myWindow, Path=MyProperty}"/>
    

24voto

yossharel Points 609
  • Pour la Liaison, si DataContext ne l'utilisez pas, tout simplement, vous pouvez ajouter au Constructeur du code de derrière :

    C'.DataContext = Ce;

À partir de maintenant, Chaque propriété dans le code, accessible à lier :

<TextBlock Text="{Binding PropertyName}"/>
  • Une autre façon, c'est juste pour donner le nom de l'élément racine du XAML:

    x:Name="root"

Parce que le code XAML sera partielle de la classe de la cs, on peut avoir accès à la propriété par le nom:

<TextBlock Text="{Binding ElementName="root" Path=PropertyName}"/>

Remarque: l'accès est possible uniquement à la propriété . pas de champs.

il est nécessaire d'écrire à la fois sur set(); et Get(); ou indiquer le Mode de Liaison = OneWay

9voto

Phil Price Points 1441

Pour quick-and-dirty Windows WPF, je préfère de liaison le DataContext de la Fenêtre pour la fenêtre elle-même; cela peut être fait dans le code XAML.

Window1.xaml

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    DataContext="{Binding RelativeSource={RelativeSource self}}"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <TextBlock Text="{Binding Path=MyProperty1}" />
        <TextBlock Text="{Binding Path=MyProperty2}" />
        <Button Content="Set Property Values" Click="Button_Click" />
    </StackPanel>
</Window>

Window1.xaml.cs

public partial class Window1 : Window
{
    public static readonly DependencyProperty MyProperty2Property =
        DependencyProperty.Register("MyProperty2", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty));

    public static readonly DependencyProperty MyProperty1Property =
        DependencyProperty.Register("MyProperty1", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty));

    public Window1()
    {
        InitializeComponent();
    }

    public string MyProperty1
    {
        get { return (string)GetValue(MyProperty1Property); }
        set { SetValue(MyProperty1Property, value); }
    }

    public string MyProperty2
    {
        get { return (string)GetValue(MyProperty2Property); }
        set { SetValue(MyProperty2Property, value); }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Set MyProperty1 and 2
        this.MyProperty1 = "Hello";
        this.MyProperty2 = "World";
    }
}

Dans l'exemple ci-dessus, note la liaison utilisé dans l' DataContext bien sur la Fenêtre, ce qui dit "Mis à votre contexte de données vous-même". Les deux blocs de texte sont liés à l' MyProperty1 et MyProperty2, le gestionnaire d'événement pour le bouton définir ces valeurs, qui seront automatiquement propagées à l' Text la propriété des deux TextBlocks que les propriétés sont des Propriétés de Dépendance.

3voto

Sheridan Points 26778

Il est également intéressant de noter qu'un "Liant" ne peut être réglé que sur une DependencyProperty de DependencyObject. Si vous souhaitez définir un non DependencyProperty (eg. une propriété classique) sur un objet dans le code XAML, alors vous devrez utiliser Robert de la première méthode de l'utilisation des ressources dans le code derrière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X