私は次の例のようなコードでバインディングを作成すると、すべてが正常に動作します動作しません:私は純粋に結合することを設定しようとするとXAMLから結合は
<Window x:Class="DataBinding.BindingToCustomType"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="Window"
Title="BindingToCustomType">
<TextBlock x:Name="NameBlock" Width="120" FontSize="16" Foreground="Red" />
</Window>
:
public partial class BindingToCustomType : Window {
public Craftsman Craftsman { get; set; }
public BindingToCustomType() {
InitializeComponent();
Craftsman = new Craftsman() {Age = 45, LastName = "Joe", Name = "Grok"};
Binding binding = new Binding();
binding.Source = Craftsman;
binding.Path = new PropertyPath("Name");
NameBlock.SetBinding(TextBlock.TextProperty, binding);
}
XAMLをXAMLで、それは動作しません:
<TextBlock x:Name="NameBlock" Width="120" FontSize="16" Foreground="Red" Text="{Binding Source=Craftsman, Path=Name, Mode=OneWay}"/>
私はウィンドウの要素のデータコンテキストを設定しても、それは動作しません:
DataContext="{Binding RelativeSource={RelativeSource Self}}"
私はこの問題を解決しません。 私は理解していますWHYこれはXAMLではDataContextと一緒に、または使用しないで動作しません。
しかし、なぜこれがこのように動作していますか?つまり、コードで同じ方法でXAMLで同じバインディングを作成しました。 XAMLでコードが動作する理由は何ですか? XAMLのSourceプロパティ設定の意味は何ですか? – EngineerSpock
コードでは、ソースをCratfsmanタイプのオブジェクトに設定します.xamlではソースを*文字列リテラル* "職人"に設定します。 xamlでSourceを使用する方法の例を追加しました。 –
パスも文字列で初期化されますが、動作します。 Sourceプロパティは私にとって非常に難しいようです。面白いと思うかもしれませんが、私はWPFで5年間働いていて、バインディングを成功させてきましたが、彼らが実際にどのように実際に働いているかを理解するためには、 – EngineerSpock