列表框中的ObservableCollection图像到内容控件主细节WPf

时间:2011-05-27 04:20:57

标签: wpf observablecollection

我有一个可观察的图像集,通过以下代码填充:

<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"/>

但是,Content Control应该通过ObservableCollection

绑定到BigImageView
 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");
   }
 }

我想在移动列表框时将图像返回到内容控件。我一直在绞尽脑汁,尝试每一个但是它不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

没有必要绑定选定项目,集合视图应该处理它。

试试这个:

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

答案 1 :(得分:0)

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>