WPF绑定到局部变量

时间:2009-09-26 12:38:14

标签: wpf data-binding binding

你能绑定到这样的局部变量吗?

SystemDataBase.cs

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

SystemDataBase.xaml

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

...

文本设置为局部变量“text”

5 个答案:

答案 0 :(得分:35)

模式是:

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

答案 1 :(得分:24)

要绑定到本地“变量”,变量应为:

  1. 属性,而不是字段。
  2. 公开。
  3. 通知属性(适用于模型类)或依赖属性(适用于视图类)
  4. 示例:

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

答案 2 :(得分:15)

如果您正在做很多这样的事情,可以考虑将整个窗口的DataContext绑定到您的类。这将默认继承,但仍可以像往常一样被覆盖

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

然后,对于单个组件,您可以使用

Text="{Binding Text}"

答案 3 :(得分:1)

要绑定Window类中存在的局部变量,它必须是: 1.公共财产 2.通知财产。为此,您的窗口类应该为此属性实现INotifyPropertyChanged接口。

然后在构造函数

public Assgn5()
{           
    InitializeComponent();

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

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

答案 4 :(得分:0)

不,它必须是一个可见的财产。