Подтвердить что ты не робот

WPF привязка к локальной переменной

Можете ли вы привязать к локальной переменной, как это?

SystemDataBase.cs

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

SystemDataBase.xaml

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

??

Текст установлен на локальную переменную "текст"

4b9b3361

Ответ 1

Образец:

public string Text {get;set;}

и привязка

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

Если вы хотите, чтобы привязка автоматически обновлялась, вы должны сделать это DependencyProperty.


Я думаю, что 3.5 добавил ElementName к привязкам, поэтому следующее немного проще:

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

Ответ 2

Для привязки к локальной "переменной" переменная должна быть:

  1. Свойство, а не поле.
  2. Public.
  3. Либо уведомляющее свойство (подходит для классов модели), либо свойство зависимости (подходит для классов представления)

Пример уведомления свойства:

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( ... );
}

Ответ 3

Если вы много чего это делаете, вы можете связать DataContext всего окна с вашим классом. Это будет унаследовано по умолчанию, но все равно может быть переопределено как обычно

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

Затем для отдельных компонентов вы можете использовать

Text="{Binding Text}"

Ответ 4

Чтобы связать локальную переменную, которая присутствует в вашем классе Window, она должна быть: 1. Общественная собственность 2. Уведомляющее свойство. Для этого ваш класс window должен реализовать интерфейс INotifyPropertyChanged для этого свойства.

Тогда в конструкторе

public Assgn5()
{           
    InitializeComponent();

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

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

Ответ 5

Нет, это должно быть видимым свойством.