orb*_*kov 6 data-binding wpf datacontext inotifypropertychanged
我创造了最简单的绑定.绑定到后面代码中的对象的文本框.
事件虽然 - 文本框仍然是空的.
窗口的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>
Run Code Online (Sandbox Code Playgroud)
代码背后
public partial class SimpleBinding : Window
{
public Book TheBook;
public SimpleBinding()
{
TheBook = new Book() { BookName = "The Mythical Man Month" };
InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
书中的对象
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");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先将这DataContext="MainWindow"组DataContexta删除Window为string MainWindow,然后ElementName为您的绑定指定将绑定源定义为x:Name="TheBook"您的Window. 您可以通过ElementName=TheBook从绑定中删除并通过将 a 分配给 来使代码正常工作DataContext(如果未指定,则默认源Window为TheBook
public SimpleBinding()
{
...
this.DataContext = TheBook;
}
Run Code Online (Sandbox Code Playgroud)
或者通过指定RelativeSource您的绑定来Window公开TheBook:
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=TheBook.BookName}"/>
Run Code Online (Sandbox Code Playgroud)
但由于您无法绑定到字段,因此您需要将其转换TheBook为属性:
public partial class SimpleBinding : Window
{
public Book TheBook { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27597 次 |
| 最近记录: |