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

this.DataContext = thisを設定して、パスにバインドするだけです。

あなたが必要です

XYZ = "XYZ";  

InitializeComponentの前

テキストボックスが初期化されると、XYZはnullになります

于 2012-05-24T18:01:24.450 に答える
1

通常のプロパティを使用したことはありませんが、INotifyPropertyChanged インターフェイスを実装し、XYZ のセッターでプロパティ変更イベントを発生させる必要があると思います。私見のより良いアプローチは、依存関係プロパティを直接使用することです。

XYZ を依存関係プロパティにするだけで機能します。

于 2012-05-24T17:39:38.273 に答える