web-dev-qa-db-ja.com

ローカル変数へのWPFバインディング

このようなローカル変数にバインドできますか?

SystemDataBase.cs

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

SystemDataBase.xaml

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

テキストはローカル変数「text」に設定されます

22
PrimeTSS

パターンは次のとおりです。

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}"/>
35
Will

ローカルの「変数」にバインドするには、変数は次のようになります。

  1. フィールドではなくプロパティ。
  2. 公衆。
  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( ... );
}
24
Danny Varod

これを多く行う場合は、ウィンドウ全体のDataContextをクラスにバインドすることを検討できます。これはデフォルトで継承されますが、通常どおりオーバーライドできます

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

次に、個々のコンポーネントに対して使用できます

Text="{Binding Text}"
15
Neil

Windowクラスに存在するローカル変数をバインドするには、次のようにする必要があります。1.パブリックプロパティ2.通知プロパティ。このため、ウィンドウクラスはこのプロパティのINotifyPropertyChangedインターフェイスを実装する必要があります。

次に、コンストラクターで

public Assgn5()
{           
    InitializeComponent();

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

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