WPF привязка к локальной переменной
Можете ли вы привязать к локальной переменной, как это?
SystemDataBase.cs
namespace WebWalker
{
public partial class SystemDataBase : Window
{
private string text = "testing";
...
SystemDataBase.xaml
<TextBox
Name="stbSQLConnectionString"
Text="{SystemDataBase.text}">
</TextBox>
??
Текст установлен на локальную переменную "текст"
Ответы
Ответ 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
Для привязки к локальной "переменной" переменная должна быть:
- Свойство, а не поле.
- Public.
- Либо уведомляющее свойство (подходит для классов модели), либо свойство зависимости (подходит для классов представления)
Пример уведомления свойства:
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
Нет, это должно быть видимым свойством.