2009-09-26 78 views
17

你能像這樣綁定到一個局部變量嗎?WPF綁定到本地變量

SystemDataBase.cs

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

SystemDataBase.xaml

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

??

將文本設置爲局部變量「text」

回答

0

不,它必須是可見的屬性。

30

的模式是:

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}"/> 
+3

還是有類執行INotifyPropertyChanged自動具有約束力的工作。 – 2009-09-27 18:39:51

+1

我想你的意思是把它改爲DependencyProperty。在DependencyObject上實現INPC將是愚蠢的。 – Will 2009-11-27 18:24:31

+7

+1 for derp!大聲笑 – windowskm 2012-06-29 14:23:14

22

要結合當地的 「變量」 的變量應該是:

  1. 一財產,而不是一個領域。
  2. 公共。
  3. 無論是通知屬性(適用於模型類)或依賴屬性(sutable爲視圖類)

例子:

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

如果你做了很多這方面,你可以考慮將整個窗口的DataContext綁定到你的類。默認將被繼承,但是仍然可以覆蓋照常

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

然後爲各個組件可以使用

Text="{Binding Text}" 
+0

我知道這個問題是針對WPF的,但是如果你的目標是Silverlight,那麼這就是要走的路。因爲針對Web和Phone的Silverlight沒有針對RelativeSource的FindAncestor方法 – Adarsha 2012-08-07 04:56:46

0

要綁定一個局部變量,它存在於你的窗口類有成爲: 1.公共財產 2.通知財產。爲此,您的窗口類應該爲此屬性實現INotifyPropertyChanged接口。

然後在構造函數中

public Assgn5() 
{   
    InitializeComponent(); 

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

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