2

Data Binding を理解するのに少し苦労しています。私はWindows Phone 8開発を学ぼうとしています。

ここでいくつかのサンプルコードを理解しようとしています。

彼は次のようMainPage.xamlに定義していDataContextます:

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

LocatorはinViewModelLocatorとして定義され 、 タイプ のパブリック プロパティです。ResourceApp.xamlMasterMasterViewModel

MasterViewModelこれは、クラスのプロパティにアクセスできるようになったことを意味すると思いました。そして、あなたは持っています。しかし、同じページで、彼はMasterViewModelではなく、まったく異なる にあるプロパティにバインドしViewModelます。

Text="{Binding Model.FirstName}"

Modelは別の のプロパティViewModelです。

では、どうすればアクセスできるのでしょうか? DataContext私が見る限り、彼はどこかを上書きしませんでした。私は何が欠けていますか?

データバインディングをまだ理解していないと思うので、多くのコードを投稿しませんでした。答えは明らかです。必要に応じてさらにコードをお見せします。それは Laurent Ibugnion のサンプル コードです。

前もって感謝します

編集:彼のビデオでは、DataTemplate で DataContext が別の ViewModel に設定されているため、dataBinding を使用できると彼は言っています...しかし、彼がこの 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}" />

ご協力いただきありがとうございます

4

1 に答える 1

1

あなたが私たちに示すコードは、リソースとしての ItemTemplate です。データはリストボックスにバインドされています。そこで、SelectedFriend にバインドします。

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

他のデータ バインディングが適用されていない場合は、DataContext プロパティが使用されます。

于 2013-02-16T16:18:20.997 に答える