【发布时间】:2011-09-20 09:00:03
【问题描述】:
我有一个名为 Data 的类,其中有一些公共成员:Name、Age、Address。
我还有带有文本框 Name、Age、Address 的窗口。
Data 对象可以随时更改。
如何将Data 对象绑定到文本框并在对象更改后跟随?
我知道有INotifyPropertyChanged 和“依赖属性”,但我不知道如何使用它们。
编辑
public class MyData : INotifyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (_name != value)
{
_name = value;
OnPropertyChnged("Name");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
ProppertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(name));
}
}
XAML 代码:
xmlns:myApp="clr-namespace:MyApp"
<Window.Resources><myApp:MyData x:key = data/></WindowResources>
<TextBox><TextBox.Text><Binding Source="{StaticResource data}" Path="Name" UpdateSourceTrigger="PropertyChanged"/></TextBox.Text></TextBox>
class OtherClass
{
private MyData data;
//the window that have the binding textbox
private MyWindow window;
public OtherClass()
{
data = new MyData();
data.Name = "new name"
window = new MyWindow();
window.show();
}
}
【问题讨论】:
-
实现
INotifyPropertyChanged应该花费您 5 分钟:2 分钟 google-ing 和 3 分钟复制/粘贴到您的代码中...学习将您的TextBox绑定到对象的语法应该花费更短的时间:) -
其实我有 wpf 书,我在 google 上花了超过 5 分钟,我仍然不明白...这是我第一次使用 wpf,对我来说是全新的
-
你能添加你的代码来定义静态资源数据吗?
-
这个是否构建,因为您似乎有几个错字,在 OnPropertyChanged("Name") 中缺少 a 并且在 PropertyChangedEventHandler 中有一个额外的 p?
-
这是一个不同的类实例,视图的静态资源正在构建它自己的类实例,因此您在 OtherClass 中创建的实例不会被使用。您可以摆脱 StaticResource,然后将窗口的使用 DataContext 设置为该类的实例,然后将绑定更改为
标签: wpf binding dependency-properties inotifypropertychanged