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

我有几个假设。一是 FlipView 控件的 ItemsSource 绑定到您的 Images 属性。如果您要将 DataContext 设置为您自己(相关页面),您需要执行几个选项之一。

一:不要将Images设置为新的集合。您正在使用 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");
}

二:在页面中实现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

建议 Shawn 的方式是我会推荐,但是当我在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 回答