为什么TextBlock没有绑定?

时间:2014-02-14 18:00:48

标签: c# .net wpf

当我运行这个简单的wpf应用程序时,我得到一个空白窗口。我有什么想法吗?

//MainWindow.xaml.cs
public string SimpleText {get;set;}
public MainWindow()
{
  InitializeComponent();
  SimpleText = "this is a test";
}

//MainWindow.xaml
<StackPanel>
  <TextBlock Text="{Binding SimpleText}" Width="200"/>
</StackPanel>

2 个答案:

答案 0 :(得分:2)

DataContext是一种可行的方法,但您也可以使用RelativeSource标记扩展来获取窗口的属性:

<TextBlock Text="{Binding SimpleText, RelativeSource={RelativeSource
                          Mode=FindAncestor, AncestorType=Window}}" Width="200"/>

答案 1 :(得分:1)

您必须设置DataContext

public MainWindow()
{
    InitializeComponent();
    SimpleText = "this is a test";
    this.DataContext = this;
}

作为替代方案,您可以在XAML一侧设置DataContext,如下所示:

XAML

<Window x:Class="TextBlockDontBind.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:this="clr-namespace:TextBlockDontBind"
    Title="MainWindow" Height="350" Width="525">

    <Window.DataContext>
        <this:TestData />
    </Window.DataContext>

    <StackPanel>
        <TextBlock Text="{Binding SimpleText}" Width="200"/>
    </StackPanel>
</Window>

Code-behind

public class TestData
{
    private string _simpleText = "this is a test";

    public string SimpleText
    {
        get
        {
            return _simpleText;
        }

        set
        {
            _simpleText = value;
        }
    }
}

但是在这种情况下更新属性,对于Class必须实现INotifyPropertyChanged接口。