У меня есть 2 просмотра в одном окне Первый списокView, который загружает изображение с изображением & Название изображения. Во втором списке-списке я хочу обновить выбранное имя/имя изображения &, предлагая пользователю удалить или просмотреть выбранные изображения нажатием кнопки.WPF: Получить выбранные значения Переплет ListView
Я следил за этой статьей (http://www.clear-lines.com/blog/post/Selecting-an-item-in-a-list-with-WPF-and-M-V-VM.aspx), но мне не удалось получить выбранные элементы путем привязки. Как я могу получить выбранное имя/имя изображения из модели.
Код:
//ImageFile Collection Model
public class ImageFileCollectionViewModel: INotifyPropertyChanged
{
private ObservableCollection<ImageFileViewModel> _allImages;
private int dataItemsCount;
public ObservableCollection<ImageFileViewModel> AllImages
{
get { return _allImages; }
}
public int DataItemsCount
{
get
{
return dataItemsCount;
}
private set
{
dataItemsCount = value;
OnPropertyChanged("DataItemsCount");
}
}
public ImageFileCollectionViewModel()
{
this._allImages = new ObservableCollection<ImageFileViewModel>();
this.DataItemsCount = 0;
}
public void AddNewPhotoItem(IImageFile imageFile)
{
ImageFileViewModel newImageFileViewModel = new ImageFileViewModel(imageFile);
this._allImages.Add(newImageFileViewModel);
this.DataItemsCount++;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public ImageFileViewModel ImageFileName { get; set; }// To get the selected Image name
}
Первый ListView:
string destination_dir = System.IO.Directory.GetCurrentDirectory() + @"./4x6";
ImageFileCollectionViewModel ImagesViewModel = new ImageFileCollectionViewModel();
ImageFileControler.CompleteViewList(ImagesViewModel, destination_dir);
ListViewImage.DataContext = ImagesViewModel;
Xaml:
<ListView SelectionMode="Multiple" x:Name="ListViewImage" Width="Auto"
ItemsSource="{Binding Path=AllImages}" Margin="0,20,0,0"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode= "Recycling" Height="333" VerticalAlignment="Top">
<ListView.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Storyboard x:Key="WaitingTimeline" Timeline.DesiredFrameRate="10">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" RepeatBehavior="Forever"
Storyboard.TargetName="WaitingImage"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0]
.(RotateTransform.Angle)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="-15"/>
<SplineDoubleKeyFrame KeyTime="00:00:03" Value="15"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</DataTemplate.Resources>
<StackPanel Orientation="Horizontal" Height="100">
<Image x:Name="ThumbnailImage" Margin="2" Visibility="Collapsed" Height="120" Width="180" Source="{Binding Path=Thumbnail}" >
<Image.BitmapEffect>
<DropShadowBitmapEffect ShadowDepth="5" />
</Image.BitmapEffect>
</Image>
<Image x:Name="WaitingImage" Visibility="Visible" Height="20" Width="20" Source="./Hourglass.png">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" CenterX="10" CenterY="10"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
<TextBlock Margin="10,40,0,0" Text="{Binding Path=ShortName}" />
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsLoaded}" Value="True">
<Setter Property="Visibility" TargetName="ThumbnailImage" Value="Visible"/>
<Setter Property="Visibility" TargetName="WaitingImage" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsLoaded}" Value="False">
<Setter Property="Visibility" TargetName="WaitingImage" Value="Visible"/>
<Setter Property="Visibility" TargetName="ThumbnailImage" Value="Collapsed"/>
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="WaitingTimeline_BeginStoryboard" Storyboard="{StaticResource WaitingTimeline}"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="WaitingTimeline_BeginStoryboard"/>
</DataTrigger.ExitActions>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Второй ListView, чтобы получить выбранное изображение Имя/имена:
<StackPanel Name="secondLBox" Margin="53,369,10,31" Orientation="Vertical" >
<ListBox Height="65"
Name="ImageNameListBox"
ItemsSource="{Binding AllImages}"
DisplayMemberPath="LastName"
SelectedItem="{Binding Path=ImageFileName}"/>
<Label Content="Selected Image"/>
<Label Content="{Binding ImageFileName.FileName}" Visibility="Visible" Height="39"/>
</StackPanel>
Кроме ответа Rohits, если ImageViewModel.ImageFileName должен содержать элемент, выбранный в ListView, тогда я считаю, что вы также должны привязать ListView.SelectedItem к ImageViewModel.ImageFileName. (ListView.SelectedItem использует двустороннюю привязку по умолчанию) – elgonzo