WPF数据绑定:为什么我的副本不显示在屏幕上?

时间:2010-11-17 04:21:38

标签: wpf wpf-4.0

我在这里错过了什么简单的事情?为什么我的副本不会显示在屏幕上?

<Window x:Class="DeleteThis.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" >
<Grid>

    <StackPanel>

        <TextBlock Text="{Binding Path=SomeCopy}" Height="35" Width="100" Margin="10"/>


    </StackPanel>
</Grid>

和我的代码隐藏。

    public partial class MainWindow : Window
{


    private string _someCopy;
    public string SomeCopy
    {
        get
        {
            return _someCopy;
        }

        set
        {
            _someCopy = value;
        }
    }

    public MainWindow()
    {

        InitializeComponent();

        SomeCopy = "why doesn't this display";
    }
}

3 个答案:

答案 0 :(得分:3)

您永远不会设置窗口的DataContext。将您的XAML更改为此...

<TextBlock Text="{Binding}" Height="35" Width="100" Margin="10"/>

...并更改后面的代码以添加DataContext行...

    public MainWindow()
    {
        InitializeComponent();

        SomeCopy = "why doesn't this display";

        this.DataContext = SomeCopy;
    }

您当前的问题与其他答案中提到的需要DependencyProperty无关。

答案 1 :(得分:1)

WPF永远不会发现该属性发生了变化。

要修复它,您可以将该属性转换为dependency property

编辑:您还需要绑定到Window本身的属性,就像这样

<TextBlock Text="{Binding Path=SomeCopy, RelativeSource={RelativeSource Self}}" ... /> 

答案 2 :(得分:0)

SLaks的答案是正确的。但是手动创建依赖属性很烦人,因此我将您链接到我最喜欢的解决方案:A custom PostSharp NotifyPropertyChangedAttribute,当与PostSharp结合使用时,会将任何给定类的所有属性都转换为依赖属性。