このようなローカル変数にバインドできますか?
SystemDataBase.cs
namespace WebWalker
{
public partial class SystemDataBase : Window
{
private string text = "testing";
...
SystemDataBase.xaml
<TextBox
Name="stbSQLConnectionString"
Text="{SystemDataBase.text}">
</TextBox>
?
テキストはローカル変数「text」に設定されます
パターンは次のとおりです。
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}"/>
ローカルの「変数」にバインドするには、変数は次のようになります。
通知プロパティの例:
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( ... );
}
これを多く行う場合は、ウィンドウ全体のDataContextをクラスにバインドすることを検討できます。これはデフォルトで継承されますが、通常どおりオーバーライドできます
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
次に、個々のコンポーネントに対して使用できます
Text="{Binding Text}"
Windowクラスに存在するローカル変数をバインドするには、次のようにする必要があります。1.パブリックプロパティ2.通知プロパティ。このため、ウィンドウクラスはこのプロパティのINotifyPropertyChangedインターフェイスを実装する必要があります。
次に、コンストラクターで
public Assgn5()
{
InitializeComponent();
this.DataContext = this; // or **stbSQLConnectionString**.DataContext = this;
}
<TextBox
Name="stbSQLConnectionString"
Text="{Binding text}">
</TextBox>