web-dev-qa-db-fra.com

WPF Liaison à une variable locale

Pouvez-vous vous lier à une variable locale comme celle-ci?

SystemDataBase.cs

namespace WebWalker
{
    public partial class SystemDataBase : Window
    {
        private string text = "testing";
...

SystemDataBase.xaml

 <TextBox 
       Name="stbSQLConnectionString" 
       Text="{SystemDataBase.text}">
 </TextBox>

??

Le texte est défini sur la variable locale "text"

21
PrimeTSS

Le motif est:

public string Text {get;set;}

et la reliure est 

{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}

Si vous souhaitez que la liaison soit mise à jour automatiquement, vous devez en faire un DependencyProperty.


Je pense que 3.5 a ajouté ElementName aux liaisons, ce qui rend un peu plus facile:

<Window x:Name="Derp" ...
  <TextBlock Text="{Binding Text, ElementName=Derp}"/>
34
Will

Pour se lier à une "variable" locale, la variable doit être:

  1. Une propriété, pas un champ.
  2. Publique.
  3. Soit une propriété de notification (adaptée aux classes de modèle), soit une propriété de dépendance (compatible pour les classes d'affichage)

Exemples:

public MyClass : INotifyPropertyChanged
{
    private void PropertyType myField;

    public PropertyType MyProperty
    {
        get
        {
            return this.myField;
        }
        set
        {
            if (value != this.myField)
            {
                this.myField = value;
                NotifyPropertyChanged("MyProperty");
            }
        }
    }

    protected void NotifyPropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

public MyClass : DependencyObject
{
    public PropertyType MyProperty
    {
        get
        {
            return (PropertyType)GetValue("MyProperty");
        }
        set
        {
            SetValue("MyProperty", value);
        }
    }

    // Look up DependencyProperty in MSDN for details
    public static DependencyProperty MyPropertyProperty = DependencyProperty.Register( ... );
}
23
Danny Varod

Si vous faites beaucoup de cela, vous pouvez envisager de lier le DataContext de la fenêtre entière à votre classe. Cela sera hérité par défaut, mais peut toujours être remplacé comme d'habitude

<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">

Ensuite, pour un composant individuel, vous pouvez utiliser

Text="{Binding Text}"
14
Neil

Pour lier une variable locale présente dans votre classe Window, elle doit être: 1. Propriété publique 2. Une propriété de notification. Pour cela, votre classe de fenêtre doit implémenter l'interface INotifyPropertyChanged pour cette propriété.

Puis dans le constructeur

public Assgn5()
{           
    InitializeComponent();

    this.DataContext = this; // or **stbSQLConnectionString**.DataContext = this;
}

 <TextBox 
   Name="stbSQLConnectionString" 
   Text="{Binding text}">
 </TextBox>
1
AnjumSKhan

Non, il doit s'agir d'une propriété visible.

0
Preet Sangha