我是WPF / SL的新手。我正面临关于silverlight数据绑定的以下问题。
场景-1 - >使用Rectangle的Fill属性绑定Textbox的Text属性 - 正常工作
<Canvas>
<Rectangle x:Name="myrect" Fill="{Binding Text, Mode=TwoWay}" Height="50" MinHeight="40" Width="100" Canvas.Left="213" Canvas.Top="202"/>
<Button Height="30" Width="50" Content="Add Age" Click="Button_Click" Canvas.Left="51" Canvas.Top="113"></Button>
<TextBox x:Name="mytb" Canvas.Left="227" TextWrapping="Wrap" Text="TextBlock" Canvas.Top="114" Height="30" Width="100"/>
</Canvas>
----------------------------------------------------------------
public MainPage()
{
InitializeComponent();
myrect.DataContext = mytb;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
mytb.Text = "orange";
}
但是当我创建一个具有属性名称的类PERSON并使用矩形的Fill属性绑定此属性时,它不起作用。
namespace SilverlightApplication9
{
public class Person
{
public string Name { get; set; }
}
}
------------------------------------------------
namespace SilverlightApplication9
{
public partial class MainPage : UserControl
{
Person person = new Person();
public MainPage()
{
InitializeComponent();
myrect.DataContext = person;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
person.Name = "orange";
}
}
}
-------------------------------------------------------------------------
<Canvas>
<Rectangle x:Name="myrect" Fill="{Binding Name, Mode=TwoWay}" Height="50" MinHeight="40" Width="100" Canvas.Left="213" Canvas.Top="202"/>
<Button Height="30" Width="50" Content="Add Age" Click="Button_Click" Canvas.Left="51" Canvas.Top="113"></Button>
<TextBox x:Name="mytb" Canvas.Left="227" TextWrapping="Wrap" Text="TextBlock" Canvas.Top="114" Height="30" Width="100"/>
</Canvas>
我不明白我错在哪里。感谢您提供的任何帮助
此致
答案 0 :(得分:0)
您遗失的部分是INotifyPropertyChanged
。 .NET Framework没有内置属性通知,因此您需要让源模型实现此接口,以通知演示框架任何更改。
public class Person : INotifyPropertyChanged
{
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
RaisePropertyChanged("Name");
}
}
}
private string _name;
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string prop)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(prop));
}
}