1

我想将文本框绑定到代码隐藏文件中定义的窗口属性。

使用“FindAncestor”设置RelativeSource 来查找窗口时,在引用窗口时绑定成功。

为什么按名称引用窗口不起作用,就像我可以绑定窗口的“标题”属性一样?

XAML:

<Window x:Class="WpfApplication123.MainWindow"
        x:Name="MyWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WPF Binding Example" Height="180" Width="237">
<Grid>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,24,0,0" Name="textBox1" VerticalAlignment="Top" Width="136"
             Text="{Binding ElementName=MyWindow, Path=Title}"/>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,53,0,0" Name="textBox2" VerticalAlignment="Top" Width="136"
             Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=XYZ}"/>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,82,0,0" Name="textBox3" VerticalAlignment="Top" Width="136"
             Text="{Binding ElementName=MyWindow, Path=XYZ}" />
  </Grid>
</Window>

后面的代码:

namespace WpfApplication123
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
      XYZ = "XYZ!";
    }

    public string XYZ { get; set; }
  }
}
4

2 回答 2

1

我从未使用过普通属性,但我猜你需要实现 INotifyPropertyChanged 接口,并在 XYZ 的设置器中引发属性更改事件。恕我直言,更好的方法是直接使用依赖属性。

只需使 XYZ 成为依赖属性,它就可以工作。

于 2012-05-24T17:39:38.273 回答
1

您可以设置 this.DataContext = this 然后绑定到路径。

你需要

XYZ = "XYZ";  

在 InitializeComponent 之前

当文本框初始化时 XYZ 为空

于 2012-05-24T18:01:24.450 回答