2013-11-04 2 views
2

MVVM Light를 사용하도록 프로젝트를 변환 중입니다.ListViewItem MouseDoubleClick MVVM 방식

ListViewItem MouseDoubleClick을 명령에 바인딩 할 때까지 모든 것이 정상적으로 작동했습니다. 내가 좋아하는 것

<ListView x:Name="ItemsFromStash" Grid.Column="0" Grid.Row="1" 
     VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
     ItemsSource="{Binding DropBox.DroppedItems}" 
     ItemTemplate="{DynamicResource DropItemTemplate}" 
     SelectedItem="{Binding DropBox.SelectedDropItem}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <EventSetter Event="Control.MouseDoubleClick" 
         Handler="EventSetter_OnHandler"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

가 그렇게 다소 보이게 :

는 지금은 그 모양

<ListView x:Name="ItemsFromStash" Grid.Column="0" Grid.Row="1" 
      VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
      ItemsSource="{Binding DropBox.DroppedItems}" 
      ItemTemplate="{DynamicResource DropItemTemplate}" 
      SelectedItem="{Binding DropBox.SelectedDropItem}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="Click"> 
        <Custom:EventToCommand Command= 
         "{Binding DropBox.RenameItemCommand, Mode=OneWay}"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

을하지만 말한다 :

재산권 '트리거' 'Style'유형의 요소에 부착 할 수 없습니다.

명령을 ListView.MouseDoubleClick으로 이동하려고 시도했지만 SelectedItem이 null 인 경우가 있습니다.

어떻게해야합니까?

+0

당신이 항목을 인식하는 것이 중요하다면 거기에 클릭 이벤트에 대한 처리기를 거기에 추가하여 거기서 목록보기로 만들 수 있습니다. e.OriginalSource는 목록보기 항목이어야합니다 –

+0

때때로 null 인 이유를 알고 있습니까? 그 행동을 반복 할 수 있니? 또한, 향후 참조를 위해 다음 비트는 아무 것도 추가하지 않고 사람들이 필요하지 않은 코드를 읽게하기 때문에 질문에서는 쓸모가 없다 :'Grid.Column = "0"Grid.Row = "1"VerticalAlignment = "늘이기"HorizontalAlignment = "늘이기". – Noctis

+0

@Noctis 불행히도 나는 그것을 매번 반복 할 수 없다. 무작위로 보인다. – gisek

답변

0

하나의 옵션은 ListView 항목에 대한 DataTemplate을 만들고 여기에 EventTrigger를 포함 할 수 있습니다. 예를 들어,

<ListView x:Name="ItemsFromStash" 
      ItemsSource="{Binding DropBox.DroppedItems}" ItemTemplate="{DynamicResource DropItemTemplate}" 
      SelectedItem="{Binding DropBox.SelectedDropItem}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="MouseLeftButtonUp"> 
         <Custom:EventToCommand Command="{Binding DropBox.RenameItemCommand, Mode=OneWay}"/> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
       <!-- Place your template controls here --> 
      </Grid>           
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

작동하지 않습니다. 명령이 절대로 실행되지 않습니다. – gisek

1

보기 :

<ListView x:Name="lw" ItemsSource="{Binding DroppedItems}"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseDoubleClick"> 
       <Custom:EventToCommand Command="{Binding DataContext.RenameItemCommand, ElementName=lw}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 

     <ListView.ItemTemplate > 
      <DataTemplate > 
       <Label Content="{Binding Field}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

당신의 명령 : 다음 코드는 목록 상자에 나를 위해 작동

private ICommand renameItemCommand; 
    public ICommand RenameItemCommand 
    { 
     get 
     { 
      if (renameItemCommand == null) 
      { 
       renameItemCommand = new RelayCommand(
             param => RenameItem() 
            ); 
      } 
      return renameItemCommand; 
     } 
    } 

private void RenameItem() 
{ 

} 
+0

명령이 실행되지 않습니다. : – gisek

+0

제발, 내 대답을 참조하십시오, 내가 그것을 바꿨어. 난 괜찮아요)) – Aleksey

1

, 그것은 동일해야합니다 :

<ListBox x:Name="listbox_name_here" 
    ItemsSource="{Binding LastEntries}" 
    SelectedItem="{Binding SelectedExercise, UpdateSourceTrigger=PropertyChanged}" 
    MinHeight="150" ToolTip="Double click to edit" 
    > 

    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseDoubleClick"> 
     <Command:EventToCommand Command="{Binding your_command_name_here}" 
       CommandParameter="{Binding ElementName=listbox_name_here, 
             Path=SelectedItem}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 

</ListBox> 

명령 매개 변수가 선택한 항목에 대한 대상을 바인딩하는 listbox (귀하의 경우 listview) 이름.

+0

당신의 코드와 함께 항목을 선택한 다음 더블 클릭 listView도 열 머리글에, 이벤트를 시작합니다. 당연히 이것은 의도했던 것이 아닙니다. –

관련 문제