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"
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}"/>
Pour se lier à une "variable" locale, la variable doit être:
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( ... );
}
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}"
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>
Non, il doit s'agir d'une propriété visible.