代码之家  ›  专栏  ›  技术社区  ›  Jordan Parmer

在纯XAML定义绑定时,是否可以在代码隐藏中访问源变量?

  •  2
  • Jordan Parmer  · 技术社区  · 16 年前

    我在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 回复  |  直到 16 年前
        1
  •  4
  •   Thomas Levesque    16 年前

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

    object MyPerson = FindResource("MyPerson");
    

    一般来说,这有点复杂…假设你有一个 TextBox 命名 textBox1 ,及其 Text 属性绑定到 Name 另一个对象的属性,可以这样做:

    BindingExpression expr = BindingOperations.GetBindingExpression(textBox1, TextBox.TextProperty);
    object source = expr.DataItem;
    
        2
  •  4
  •   Mark Carpenter    16 年前

    我相信你会的 Person p = (Person)FindResource("MyPerson"); 在窗口中,加载窗口的事件。我认为您不能为 ResourceDictionary .

    推荐文章