2013-03-05 2 views
0

У меня есть элемент управления списком, и каждый элемент содержит два изображения и текст. При щелчке по каждому элементу я хочу скрыть или отобразить выбранное изображение в выбранном элементе списка.Как показать и скрыть изображение в элементе управления списка элементов в Windows Phone

Вот XAML фрагмент кода:

  <ListBox x:Name="list" SelectionChanged="list_SelectionChanged" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <TextBlock Text="{Binding Name}"/> 
         <Image Source="{Binding ImagePath}" Stretch="None"/> 
         <Image Source="{Binding ImagePath}" Stretch="None" 
           Visibility="{Binding ImageVisibility, 
          Converter={StaticResource boolVisibilityConverter}}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

C# код:

dataSource = new ObservableCollection<ImageData>() 
     { 
     new ImageData(){Name = "User1:", ImagePath="/Images/user1.png", ImageVisibility = false}, 
     new ImageData(){Name = "User1:", ImagePath="/Images/user1.png", ImageVisibility = true}, 
     new ImageData(){Name = "User1:", ImagePath="/Images/user1.png", ImageVisibility = true}, 
     new ImageData(){Name = "User2:", ImagePath="/Images/user2.png", ImageVisibility = true} 
     }; 

Выбор списка Измененное Событие:

 private void list_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     ((ImageData)(((object[])(e.AddedItems))[0])).ImageVisibility = false; 
     list.UpdateLayout(); 
    } 

ImageData класс:

public class ImageData 
    { 
     public string ImagePath { get; set; } 
     public string Name { get; set; } 
     public bool ImageVisibility { get; set; } 
    } 

Изображение Видимость Преобразователь:

public class BooleanToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     bool flag = false; 
     if (value is bool) 
     { 
      flag = (bool)value; 
     } 
     else if (value is bool?) 
     { 
      bool? nullable = (bool?)value; 
      flag = nullable.HasValue ? nullable.Value : false; 
     } 
     return (flag ? Visibility.Visible : Visibility.Collapsed); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((value is Visibility) && (((Visibility)value) == Visibility.Visible)); 
    } 

} 

Пожалуйста, помогите мне выполнить такую ​​функциональность.

+0

Просьба уточнить немного больше того, что вы пытаетесь делать. Я не понимаю, почему у вас есть два одинаковых изображения на предмет, а какой из них вы пытаетесь скрыть и когда. –

ответ

0

Вы должны использовать интерфейс INotifyPropertyChanged http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

Например, так:

public class ImageData : INotifyPropertyChanged 
{ 
    private bool _imageVisibility; 
    public string ImagePath { get; set; } 
    public string Name { get; set; } 
    public bool ImageVisibility 
    { 
     get 
     { 
      return _imageVisibility; 
     } 
     set 
     { 
      _imageVisibility = value; 
      OnPropertyChanged("ImageVisibility"); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Полные изменения в соответствии с вашей задаче, которую вы можете увидеть here (dropbox)

+0

Спасибо Lumen !! Это ответ. – Picks

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