c# - 了解 Windows Phone 开发中的数据绑定(bind)

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

我在理解数据绑定(bind)时遇到了一些困难。 我正在尝试学习 Windows Phone 8 开发。

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

MainPage.xaml 中,他定义了 DataContext:

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

LocatorViewModelLocatorApp.xaml 中定义为 Resource 并且 MasterMasterViewModel 类型的公共(public)属性。

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

Text="{Binding Model.FirstName}"

Model 是不同 ViewModel 中的一个属性。

那么他怎么访问呢?据我所知,他没有在某处覆盖 DataContext。 我错过了什么?

我没有发布很多代码,因为我想我还不了解数据绑定(bind),答案对您来说是显而易见的。如果需要,我可以向您展示更多代码,这是来自 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}" />

谢谢你的帮助

最佳答案

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

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

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

关于c# - 了解 Windows Phone 开发中的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14911877/

相关文章:

c# - 如何在 C# 中获取应用程序的安装日期

wpf - 如何在WPF中将int绑定(bind)到Visibility?

apache-flex - [RemoteClass] 在 Flex Actionscript 中如何工作 我可以将它用于自定义数据绑定(bind)吗?

wpf - 在 WPF 中的 MVVM 中的 Viewmodel 之间传递值

WPF TextBlock 动态粗体和斜体部分

c# - 带有 Mono 的自定义函数 SQLite

c# - Task.Wait() 在静态字段初始化期间调用时从不返回?

c# - 可以用 lambda 函数覆盖方法吗

css - 在 Vuetify 中动态更改工具栏的颜色

ios - 我如何将协调器与 UIITabBarController 一起使用?