wake-up-neo.com

WPF Bindung an lokale Variable

Können Sie sich an eine lokale Variable wie diese binden?

SystemDataBase.cs

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

SystemDataBase.xaml

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

??

Text wird auf die lokale Variable "Text" gesetzt.

21
PrimeTSS

Das Muster ist:

public string Text {get;set;}

und die Bindung ist 

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

Wenn Sie möchten, dass die Bindung automatisch aktualisiert wird, sollten Sie sie als DependencyProperty festlegen.


Ich denke, 3.5 fügte ElementName zu Bindungen hinzu, daher ist Folgendes etwas einfacher:

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

Um sich an eine lokale "Variable" zu binden, sollte die Variable Folgendes sein:

  1. Eine Eigenschaft, kein Feld.
  2. Öffentlichkeit.
  3. Entweder eine Benachrichtigungseigenschaft (geeignet für Modellklassen) oder eine Abhängigkeitseigenschaft (für View-Klassen möglich)

Beispiele:

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

Wenn Sie viel davon tun, können Sie den DataContext des gesamten Fensters an Ihre Klasse binden. Dies wird standardmäßig vererbt, kann aber wie üblich überschrieben werden

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

Dann können Sie für einzelne Komponenten verwenden

Text="{Binding Text}"
14
Neil

Um eine lokale Variable zu binden, die in Ihrer Window-Klasse vorhanden ist, muss dies Folgendes sein: 1. Öffentliche Eigenschaft 2. Eine benachrichtigende Eigenschaft. Zu diesem Zweck sollte Ihre Fensterklasse die INotifyPropertyChanged-Schnittstelle für diese Eigenschaft implementieren.

Dann im Konstruktor

public Assgn5()
{           
    InitializeComponent();

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

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

Nein, es muss eine sichtbare Eigenschaft sein.

0
Preet Sangha