在纯XAML中定义绑定时,可以在后面的代码中访问源变量吗?

时间:2009-08-17 18:45:17

标签: c# .net wpf data-binding binding

我正在学习WPF中的绑定。当1)一个控件的文本直接转到另一个控件的文本字段时,我可以得到绑定工作; 2)当我在代码隐藏文件中手动配置绑定时。

在第一个场景中,我使用纯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”的实例?

2 个答案:

答案 0 :(得分:4)

我相信您必须在窗口的Window_Loaded事件中执行Person p = (Person)FindResource("MyPerson");。我认为您不能为ResourceDictionary中的项目指定名称。

答案 1 :(得分:4)

那么,在这种情况下它很容易,因为它被定义为资源:

object MyPerson = FindResource("MyPerson");

在一般情况下,它有点复杂......假设您有一个名为TextBox的{​​{1}},并且其textBox1属性绑定到Text属性另一个对象,你可以这样做:

Name