基本的Silverlight绑定

时间:2012-03-29 22:34:15

标签: silverlight data-binding

我无法弄清楚为什么我的大型项目中的绑定更改无法正常工作。我把它简化为一个仍然不起作用的示例项目。我想继续以我现在的方式设置datacontext,如果可能的话,因为这是另一个项目的工作方式。使用以下代码,SomeText中的文本未显示在文本框中。我该如何解决这个问题?

代码背后:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}

数据类:

public class ViewModel
{
    public string SomeText = "This is some text.";
}

主要用户控制:

  <UserControl xmlns:ig="http://schemas.infragistics.com/xaml"          x:Class="XamGridVisibilityBindingTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:XamGridVisibilityBindingTest="clr-namespace:XamGridVisibilityBindingTest" mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <TextBox Text="{Binding SomeText}" BorderBrush="#FFE80F0F" Width="100" Height="50">    </TextBox>
    </Grid>
</UserControl>

编辑:我只是尝试进行单向绑定。

2 个答案:

答案 0 :(得分:2)

您需要使用属性,并使您的VM继承INotifyPropertyChanged并在SomeText更改时引发PropertyChanged事件:

public class ViewModel : INotifyPropertyChanged
{
    private string someText;

    public event PropertyChangedEventHandler PropertyChanged;

    public string SomeText 
    {
        get { return someText; }
        set 
        { 
            someText = value; 
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("SomeText"));
            }
        }
    }

    public ViewModel()
    {
        SomeText = "This is some text.";
    }
}

答案 1 :(得分:0)

我想通了,你只能绑定到属性!

public class ViewModel
{
    public string SomeText { get; set; } 

    public ViewModel()
    {
        SomeText = "This is some text.";
    }
}