2009-08-17 9 views
2

私はWPFでバインディングを学んでいます。 1)コントロールのテキストが別のコントロールのテキストフィールドに直接移動し、2)コードビハインドファイルでバインドを手動で構成するときに、バインディングを取得できます。純粋にXAMLでバインディングを定義する場合、ソース変数はコードの背後でアクセスできますか?

最初のシナリオでは、純粋にXAMLを使用してバインドを構成します。コードビハインドファイルのXAMLからソース変数にアクセスできますか?

<Window x:Class="DataBindingExperiments.MainWindow" 
    ... 
    xmlns:local="clr-namespace:DataBindingExperiments.DataSources"> 
    <Window.Resources> 
     <local:Person x:Key="MyPerson" /> 
    </Window.Resources> 
    <Grid> 
     <StackPanel Orientation="Vertical"> 
      <GroupBox Header="XAML Binding" Width="Auto" Height="110" Margin="5,5,5,5"> 
       <Grid> 
        ...  
        <Grid.DataContext>  
         <Binding Source="{StaticResource MyPerson}" />  
        </Grid.DataContext>  
        <TextBox Grid.Row="0" Grid.Column="1" Name="textBox_firstName" Text="{Binding Path=FirstName, UpdateSourceTrigger=PropertyChanged}" />  
        <TextBox Grid.Row="1" Grid.Column="1" Name="textBox_lastName" Text="{Binding Path=LastName, UpdateSourceTrigger=PropertyChanged}"/>  
        <TextBlock Grid.Row="2" Grid.Column="1" Name="textBox_fullName" Text="{Binding Source={StaticResource MyPerson}, Path=FullName}" />  
       </Grid> 
... 
... 

上記のコードで、コードビハインドで「MyPerson」のインスタンスにアクセスするにはどうすればよいですか?

答えて

4

、それはリソースとして定義されていますので、その場合には、それは、簡単です。一般的なケースでは

object MyPerson = FindResource("MyPerson"); 

、それはもう少し複雑だ...あなたはtextBox1という名前TextBoxを持っていると仮定すると、そのText

BindingExpression expr = BindingOperations.GetBindingExpression(textBox1, TextBox.TextProperty); 
object source = expr.DataItem; 
+0

@Thomas::非常に巧妙な、私はのDataItemプロパティについては知りませんでした:) – Pwninstein

+1

どちらも私はなかった;)私がつまずいたプロパティは、別のオブジェクトのNameプロパティにバインドされ、あなたがそのような何かを行うことができていますドキュメント上でBindingExpressionを見ているうちに... –

+0

@ThomasLevesque Silverlightの場合はどうすればいいですか?私は銀色のGetBindingExpressionを見つけることができません。 –

4

ウィンドウのWindow_LoadedイベントでPerson p = (Person)FindResource("MyPerson");を実行する必要があると思います。 ResourceDictionaryにある商品の名前を指定することはできません。まあ

関連する問題