2013-08-06 1 views
0

My Design Code так:Как изменить коллекции изображений в silverlight?

<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; 
     } 

при постукивании по конкретному изображению нужно, чтобы показать, что особенно images.But не показывая этого. только отображение только изображений с первым щелчком. Пожалуйста, дайте мне знать, как изменить коллекцию. я связывание, что сбор в FlipView контроля в 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> 
+0

Вы хотите, чтобы при нажатии на любое изображение ваше свойство изображения обновилось с помощью коллекции, указанной вами в конкретном событии, которое произошло. .. i i right .. – loop

ответ

0

я собираюсь под несколько предположений. Во-первых, элемент управления 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"); 
} 

Два: Реализовать INotifyPropertyChanged на странице и активаций события PropertyChanged при сбросе свойства изображения

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

Вы, вероятно, обнаружите, что вам нужно больше и больше привязок. Из-за этого обычно лучше иметь отдельный класс ViewModel, который содержит ваши данные.

+0

в случае проекта Windows-8 Страница, которая наследует страницу Layoutaware .. интерфейс Inotifypropertychange не может быть унаследован ..и думаю, что это проблема. Просто c черт возьми ... и обновляй его .. – loop

0

путь Шон предлагается это я буду рекомендовать, но когда я тестировал в случае Windows 8 приложений страницу, которая наследуется LayoutAwarePage то в этом случае - Во-первых, вы получили сообщение об ошибке, что страница не может реализовать INotifyPropertyChanged во-вторых, когда я проверил его с ObsevableCollection, что время тоже не работает..так я пришел с этим обходным решением для решения вашей проблемы. в этом случае вы просто должны обновить ItemsSource Свойства вашего FlipView управления каждый раз, когда вы обновляете свою коллекцию изображений ..

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; 
    } 

Я знаю, что это не правильное решение, но я думаю, что я буду решите свою проблему ...

Смежные вопросы