ObservableCollection изображений в списке со списком элементов управления контентом WPf подробно - PullRequest
1 голос
/ 27 мая 2011

У меня есть наблюдаемая коллекция изображений, которая заполняется с помощью следующего кода:

<StackPanel Orientation="Horizontal" Grid.Column="0">
  <ListBox ItemsSource="{Binding BigImageView}" IsSynchronizedWithCurrentItem="True"
           SelectedIndex="0" SelectedItem="{Binding CurrentItem}" />
</StackPanel>
<ContentControl Name="Detail" Content="{Binding BigImageView, Mode=OneWay}"
                Margin="9,0,0,0" Grid.Column="2" HorizontalAlignment="Left" VerticalAlignment="Top"/>

Однако предполагается, что элемент управления контентом должен связываться с BigImageView с помощью ObservableCollection

 BigImage = new ObservableCollection<Image>();

 _listView = CollectionViewSource.GetDefaultView(BigImage);
 _listView.CurrentChanged += new EventHandler(OnCurrentChanged);

 public System.ComponentModel.ICollectionView BigImageView
 {
   get
   {
     return _listView;
   }
   set
   {
     _listView = value;
     OnPropertyChanged("BigImageView");
   }
 }

Iхочу вернуть изображение в элемент управления контентом при перемещении списка.Я ломал голову и пробовал все, но это не работает.любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Нет необходимости связывать выбранный элемент, об этом должен позаботиться просмотр коллекции.

Попробуйте:

 <ListBox ItemsSource="{Binding BigImageView}" IsSynchronizedWithCurrentItem="True" />

 <ContentControl Name="Detail" Content="{Binding BigImageView, Mode=OneWay}" VerticalAlignment="Top">

    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Image Source="{Binding}"/>
        </DataTemplate>
    <ContentControl.ContentTemplate>

0 голосов
/ 27 мая 2011

1

Создание модели представления со списком и выбранным элементом:

public class BigImageViewModel : INotifyPropertyChanged
{ 
     private string bigImage;

     //string for path? 
     public ObservableCollection<string> BigImageView {get; set; } //Of course, make sure it has a value

     public string SelectedBigImage          
     {
         get { return bigImage; } 
         set { bigImage = values; NotifyPropertyChanged("SelectedBigImage"); }
     }
}

Установите этот объект в DataContext вашего элемента управления в конструкторе:

DataContext = new BigImage(); //Make sure you initialize your list

Установите ListBox ItemsSource в свой список BigImage, привяжите свой SelectedItem к BigImageView и используйте его в своем управлении контентом:

<ListBox ItemsSource="{Binding BigImageView}" SelectedItem={Binding SelectedBigImage} />

ContentControl:

<ContentControl Name="Detail" Content="{Binding SelectedBigImage, Mode=OneWay}" VerticalAlignment="Top">

   <ContentControl.ContentTemplate>
       <DataTemplate>
           <Image Source="{Binding}"/> <!-- Nice template for showing your string BigImage -->
       </DataTemplate>
   <ContentControl.ContentTemplate>
</ContentControl>

2

Или прикрутите это представление модели:

Установите список непосредственно в конструкторе (после InitializeComponent ()):

myListBox.ItemsSource = ObservableCollection<string>(); //Make sure you initialize your list with whatever your object is..

Дайте списку имя:

Привязка с привязкой ElementName к выбранному элементу:

<ContentControl Name="Detail" Content="{Binding ElementName=myListBox, Path=SelectedItem}" VerticalAlignment="Top">

   <ContentControl.ContentTemplate>
       <DataTemplate>
           <Image Source="{Binding}"/> <!-- Nice template for showing your string BigImage -->
       </DataTemplate>
   <ContentControl.ContentTemplate>
</ContentControl>
...