了解Windows Phone开发中的数据绑定

时间:2013-02-16 15:27:09

标签: c# data-binding mvvm windows-phone-8 viewmodellocator

我在理解数据绑定方面遇到了一些麻烦。 我正在努力学习Windows Phone 8发展。

我想在这里了解一些示例代码。

MainPage.xaml中,他定义了DataContext

<phone:PhoneApplicationPage.DataContext>
    <Binding Path = "Master"
             Source="{StaticResource Locator}" />
</phone:PhoneApplicationPage.DataContext>

Locator是在ViewModelLocatorResource中定义为App.xaml的{​​{1}} MasterMasterViewModel类型的公共属性。

所以我认为这意味着您现在可以访问MasterViewModel类的属性。 你有。但是在同一页面上,他绑定的属性不在MasterViewModel中,而是在完全不同的ViewModel中:

Text="{Binding Model.FirstName}"

Model是不同ViewModel中的属性。

那他怎么能访问呢?就我所见,他并没有超越DataContext。 我错过了什么?

我没有发布很多代码,因为我认为我还没有理解数据绑定,答案对你来说很明显。如果需要,我可以向您展示更多代码,它是来自Laurent Ibugnion的示例代码。

提前致谢

编辑: 在他的视频中他说他可以使用dataBinding,因为在DataTemplate中DataContext被设置为不同的ViewModel ......但是我看不到他在哪里设置了这个viewModel:

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="FriendItemTemplate">
        <Grid Width="480"
              Height="112"
              Margin="0"
              Background="#FF5E0000">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="124" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Rectangle Fill="#FF0B3100"
                       Stroke="Black"
                       Grid.ColumnSpan="2"
                       Visibility="{Binding OlderThanMeIndicatorVisibility, Mode=OneWay}" />

            <Image Source="{Binding Model.PictureUri}"
                   VerticalAlignment="Top"
                   Margin="24,6,0,0" Height="100" />

            <StackPanel Grid.Column="1">
                <StackPanel Orientation="Horizontal"
                            Margin="12,0,0,0">
                    <TextBlock TextWrapping="Wrap"
                               Text="{Binding Model.FirstName}"
                               Style="{StaticResource PhoneTextGroupHeaderStyle}"
                               Margin="0" />

                    <TextBlock TextWrapping="Wrap"
                               Text=" "
                               Style="{StaticResource PhoneTextGroupHeaderStyle}"
                               Margin="0" />

                    <TextBlock TextWrapping="Wrap"
                               Text="{Binding Model.LastName}"
                               Style="{StaticResource PhoneTextGroupHeaderStyle}"
                               Margin="0" />
                </StackPanel>

                <TextBlock TextWrapping="Wrap"
                           Text="{Binding Model.DateOfBirth}"
                           Style="{StaticResource PhoneTextLargeStyle}" />
            </StackPanel>
        </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

编辑:已解决 我终于找到了,

ListBox ItemsSource="{Binding Friends}"
                     ItemTemplate="{StaticResource FriendItemTemplate}" SelectedItem="{Binding SelectedFriend, Mode=TwoWay}" />

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您向我们展示的代码是ItemTemplate作为资源。数据绑定在列表框中。在那里你绑定到SelectedFriend。

<ListBox ItemsSource="{Binding Friends}"
         ItemTemplate="{StaticResource FriendItemTemplate}"
         SelectedItem="{Binding SelectedFriend, Mode=TwoWay}" />

当没有应用其他数据绑定时,使用DataContext属性。