silverlight - 我班级的数据绑定问题

时间:2014-11-30 19:18:30

标签: silverlight data-binding

我是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>

我不明白我错在哪里。感谢您提供的任何帮助

此致

1 个答案:

答案 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));
    }
}