Stringプロパティに明示的なアクセサを追加しないと、データバインディングが機能しません。何故ですか? ここでは、テキストボックスをStringプロパティにフックする簡単な例を示します。データバインディングソースに明示的なゲッターが必要なのはなぜですか?
MainPage.xamlを:
<Grid Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="{Binding Message} />
</Grid>
そして、背後にあるコード:
public String Message;
public MainPage()
{
InitializeComponent();
Message = "Hello World";
DataContext = this;
}
これは動作しませんが、テキストボックスが空です。
ただし、プロパティアクセサを追加してください。
public String Message { get; set; };
これで動作します。
これは、MSDN Data Bindingで説明されています。誰か説明できますか?プロパティにimplic set/get accessorsがありませんか?それでも、なぜデータバインディングでプロパティにアクセスできないのですか?
おかげで、
@Slaks、@devdigital、@Matti_Virkkunen:あなたはすべて同じ答えを持っていますが、それはすべて正確ではないことが分かります。あなたはすべて、フィールドとプロパティの違いを私に明確にしました。そして、それは私に正しい答えに導いた:バインディングは、パスが関わっているときにプロパティ**でしか動かない**そうでなければ、フィールドに直接アクセスすることができる。例:上記は 'DataContext = Message;'であり、 'は動作します!したがって、パスを使用するにはアクセサが必要です。 [MSDN](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.source(v = vs95).aspx) –
peterept