我对WPF很陌生,正试图理解数据绑定,但没有太大进展。
我想从简单的事情开始 - 将文本框的内容绑定到程序中的字符串变量。
我阅读了许多MSDN文档页面,包括数据绑定、XML命名空间、标记扩展、资源、依赖属性等,但仍无法使其工作。
以下是我的MainWindow.xaml:
<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WpfTest"
Title="MainWindow">
<Grid>
<Grid.Resources>
<c:Foo x:Key="MyFoo"/>
</Grid.Resources>
<TextBox Width="100" Height="28"
Text="{Binding Source=MyFoo,
Path=BarProperty,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
我的 MainWindow.xaml.cs 文件:
namespace WpfTest
{
public class Foo : DependencyObject
{
public static readonly DependencyProperty BarProperty = DependencyProperty.Register("Bar", typeof(String), typeof(Foo));
public String Bar
{
get { return (String)GetValue(BarProperty); }
set { SetValue(BarProperty, value); }
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyFoo = new Foo { Bar = "hello" };
}
public Foo MyFoo { get; set; }
}
}
我期望程序启动时文本框显示“hello”,但它是空的。 有人能告诉我我做错了什么吗?
Grid.Resources
或DockPanel.Resources
等部分,这只会让事情变得混乱。 - HighCommander4StaticResourceExtension
或类名是一个常见的错误,在这两种情况下都会将Source
变成字符串。顺便说一下,您可以在XAML中创建自己的源,但不能使用绑定标记扩展,而是要使用实际的绑定对象,然后可以在XML元素语法中指定源。 - H.B.