2016-12-11 9 views
0

問題occures? ListViewModel:ViewModelはあなたのビューにはコントロールされていないので、EventToCommandの祖先結合WPF

AncestorType={x:Type ViewModel:ListViewModel} 

ViewModelが祖先ではありません。

namespace PhotoBrowser.List.ViewModel 
{ 
    public class ListViewModel : ViewModelBase 
    { 

     public ObservableCollection<Item> Items { get; set; } 

     public ListViewModel() 
     { 
      Items = new ObservableCollection<Item>(); 
     } 
     public RelayCommand Test 
     { 
      get; 
      set; 
     } 
     public RelayCommand DoubleClickOnItem 
     { 
      get 
      { 
       return new RelayCommand(() => OpenEdit()); 
      } 
     } 

     private void OpenEdit() 
     { 
      Messenger.Default.Send(new NotificationMessage("Edit")); 
     } 

     public RelayCommand<DragEventArgs> Drop 
     { 
      get 
      { 
       return new RelayCommand<DragEventArgs>(CheckInstanceCertificate); 
      } 
     } 

     private void CheckInstanceCertificate(DragEventArgs args) 
     { 
      var path = string.Join("", (string[])args.Data.GetData(DataFormats.FileDrop, true)); 
      Items.Add(new Item { ImagePath = path }); 
     } 
    } 

} 

ListView.xaml

<UserControl x:Class="PhotoBrowser.List.View.ListView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
      xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform" 
      xmlns:ViewModel="clr-namespace:PhotoBrowser.List.ViewModel" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      DataContext="{Binding Source={StaticResource Locator}, Path=List}" 
      > 
    <UserControl.Resources> 
     <Style x:Key="FileItemStyle" TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Margin" Value="5,5,5,5"/> 
      <Setter Property="Padding" Value="0,0,0,0"/> 
      <Setter Property="HorizontalAlignment" Value="Left"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListViewItem}"> 
         <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Height="50" > 
          <Border x:Name="border" BorderBrush="{x:Null}" BorderThickness="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="2.5"/> 
          <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
           <ContentPresenter/> 
          </StackPanel> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Resources> 
    <Grid> 
     <ListView ItemsSource="{Binding Items}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
       ItemContainerStyle="{StaticResource FileItemStyle}" AllowDrop="True"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="Drop"> 
        <Command:EventToCommand Command="{Binding Drop}" PassEventArgsToCommand="True" /> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 

      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel/> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 

      <ListView.ItemTemplate> 
       <DataTemplate> 
        <DockPanel> 
         <Image Source="{Binding ImagePath}" Height="64" Width="64"> 
          <i:Interaction.Triggers> 
           <i:EventTrigger EventName="MouseDoubleClick"> 
            <Command:EventToCommand Command="{Binding Path=Test, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ViewModel:ListViewModel}}}" /> 
           </i:EventTrigger> 
          </i:Interaction.Triggers> 
         </Image> 
        </DockPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </Grid> 
</UserControl> 

答えて

2

はを見てください。正しいは次のようになります。

  • リストビュー(親)
    • のListViewItem(子供)の代わりに、これはあなたのViewModelあるので、あなたが(リストビューのDataContextのに特異的に結合する必要があります。この

):

<Command:EventToCommand Command="{Binding Path=DataContext.Test, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}"/> 
関連する問題