我创建了最简单的绑定。绑定到后面代码中的对象的文本框。
但事件 - 文本框仍为空。
窗口的 DataContext 已设置,并且绑定路径已存在。
你能说出什么问题了吗?
XAML
<Window x:Class="Anecdotes.SimpleBinding"
x:Name="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SimpleBinding" Height="300" Width="300" DataContext="MainWindow">
<Grid>
<TextBox Text="{Binding Path=BookName, ElementName=TheBook}" />
</Grid>
</Window>
代码隐藏
public partial class SimpleBinding : Window
{
public Book TheBook;
public SimpleBinding()
{
TheBook = new Book() { BookName = "The Mythical Man Month" };
InitializeComponent();
}
}
书本对象
public class Book : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
private string bookName;
public string BookName
{
get { return bookName; }
set
{
if (bookName != value)
{
bookName = value;
OnPropertyChanged("BookName");
}
}
}
}
首先删除DataContext="MainWindow"
因为这设置DataContext
of a Window
to a string
主窗口,然后你指定ElementName
对于您的绑定,它将绑定源定义为另一个控件x:Name="TheBook"
你不存在的Window
。您可以通过删除来使代码正常工作ElementName=TheBook
从你的绑定或者通过分配DataContext
,如果未指定,则为默认源Window
to TheBook
public SimpleBinding()
{
...
this.DataContext = TheBook;
}
或通过指定RelativeSource
您的绑定Window
这暴露了TheBook
:
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=TheBook.BookName}"/>
但由于您无法绑定到字段,因此您需要转换TheBook
进入财产:
public partial class SimpleBinding : Window
{
public Book TheBook { get; set; }
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)