0

私のデザインコードは次のようになります:

<Grid HorizontalAlignment="Left" Height="42" VerticalAlignment="Top" Width="302" Margin="12,471,0,0" Background="{StaticResource AppBarItemForegroundThemeBrush}">
                <TextBlock HorizontalAlignment="Left" Margin="6,6,0,0" TextWrapping="Wrap" Text="Change Color" VerticalAlignment="Top" Height="26" Width="137" FontSize="18" Foreground="Black" />
                <Image HorizontalAlignment="Left" Height="33" Margin="163,3,0,0" VerticalAlignment="Top" Width="41" Source="Assets/c1-1.png" x:Name="c1" Tapped="c1_Tapped" />
                <Image HorizontalAlignment="Left" Height="32" Margin="212,4,0,0" VerticalAlignment="Top" Width="45" Source="Assets/c3-1.png" x:Name="c2" Tapped="c2_Tapped" RenderTransformOrigin="0.825,0.5" />
                <Image HorizontalAlignment="Left" Height="33" Margin="262,3,0,0" VerticalAlignment="Top" Width="40" Source="Assets/c2-1.png" x:Name="c3" Tapped="c3_Tapped" />

            </Grid>

コード ビハインド コードは次のようになります。

private void c1_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Images = new ObservableCollection<string>();
            Images.Add(@"Assets/02_perspective_img_1.png");
            Images.Add(@"Assets/02_perspective_img_2.png");
            Images.Add(@"Assets/02_perspective_img_3.png");

            this.DataContext = this;
        }

        private void c2_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Images = new ObservableCollection<string>();
            Images.Add(@"Assets/03_perspective_img_1.png");
            Images.Add(@"Assets/03_perspective_img_2.png");
            Images.Add(@"Assets/03_perspective_img_3.png");

            this.DataContext = this;
        }

        private void c3_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Images = new ObservableCollection<string>();
            Images.Add(@"Assets/01_perspective_img_1.png");
            Images.Add(@"Assets/01_perspective_img_2.png");
            Images.Add(@"Assets/01_perspective_img_3.png");

            this.DataContext = this;
        }

特定の画像をタップすると、その特定の画像を表示する必要がありますが、表示されません。最初にクリックされたアイテムの画像のみを表示しています。コレクションを変更する方法を教えてください。そのコレクションを Windows 8 のフリップビュー コントロールにバインドしています。

        <FlipView.ItemTemplate>
            <DataTemplate>
                <Image HorizontalAlignment="Left"   Source="{Binding}" Height="450" VerticalAlignment="Top" Width="792" x:Name="imagecontrol" Stretch="Fill"/>

            </DataTemplate>
        </FlipView.ItemTemplate>



    </FlipView>
4

2 に答える 2

0

私はいくつかの仮定の下に行きます。1 つは、FlipView コントロールの ItemsSource が Images プロパティにバインドされていることです。DataContext を自分自身 (問題のページ) に設定する場合は、いくつかのオプションのいずれかを実行する必要があります。

1 つ: イメージを新しいコレクションに設定しないでください。ObservableCollection を使用しているので、それを利用してください。コレクションをクリアして、アイテムを追加し直します。

private void c3_Tapped(object sender, TappedRoutedEventArgs e)
{
    Images.Clear();
    Images.Add(@"Assets/01_perspective_img_1.png");
    Images.Add(@"Assets/01_perspective_img_2.png");
    Images.Add(@"Assets/01_perspective_img_3.png");
}

2: ページに INotifyPropertyChanged を実装し、Images プロパティをリセットしたときに PropertyChanged イベントを発生させます。

private ICollection<string> _images;
public ICollection<string> Images 
{
    get { return _images; }
    set 
    {
        _images = value;
        OnPropertyChanged("Images");
    }
}

おそらく、ますます多くのバインディングが必要になるでしょう。このため、通常は、データを保持する別の ViewModel クラスを用意することをお勧めします。

于 2013-08-06T19:21:26.117 に答える
0

ショーンが提案されている方法をお勧めしますが、 LayoutAwarePageによって継承されるWindows 8 アプリ ページの場合にそれをテストしたとき、その場合 - 最初に、ObsevableCollectionでテストしたときに、ページがInotifypropertyChangedを実装できないというエラーが発生しました。また、それは機能していません..だから私はあなたの問題を解決するためのこの回避策を持ってきました. この場合、画像コレクションを更新するたびに、 FlipViewコントロールのitemsSourceプロパティを更新するだけで済みます。

private void c1_Tapped(object sender, TappedRoutedEventArgs e)
    {
        Images = new ObservableCollection<string>();
        Images.Add(@"Assets/02_perspective_img_1.png");
        Images.Add(@"Assets/02_perspective_img_2.png");
        Images.Add(@"Assets/02_perspective_img_3.png");

       FlipviewControlName.ItemsSource = Images;
    }

これが適切な解決策ではないことはわかっていますが、私はあなたの問題を解決すると思います...

于 2013-08-07T05:34:49.387 に答える