我在这里错过了什么简单的事情?为什么我的副本不会显示在屏幕上?
<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";
}
}
答案 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结合使用时,会将任何给定类的所有属性都转换为依赖属性。