2014-02-16 6 views
0

목록 상자에서 항목을 끌어다 놓을 수있는 ReorderListBox control을 사용하고 있습니다. 나는 또한 탭 이벤트를 캡처하고 RelayCommand 핸들러를 실행 MvvmLight, EventTriggerEventToCommand 클래스를 사용하고ItemTemplate에 ScrollViewer가있는 경우 Windows Phone에서 SelectedItem이 설정되지 않음

. 일반 나이가 StackPanel 일 때 모든 것이 잘 작동합니다. 내 목록 상자의 항목 템플릿입니다. 그러나, 내가 ScrollViewer을 붙이자 마자, 나의 SelectedItem은 null로 나타난다. 해당 스크롤 뷰어에 바인딩해야하는 항목을 가져 오는 방법이 있습니까? 아래 코드.

뷰 모델

public ViewModelClass 
{ 
    ... 

    public ObservableCollection<MyItemViewModel> MyItemsSource { get; private set; } 

    public RelayCommand<MyItemViewModel> EditItemCommand { get; private set; } 

    public ViewModelClass() 
    { 
     EditItemCommand = new RelayCommand<MyItemViewModel>(OnEditItem); 
    } 

    private void OnEditItem(MyItemViewModel parameter) 
    { 
     // parameter is always null, even when I change the type of the RelayCommand to object 
    } 
} 

XAML

<rlb:ReorderListBox x:Name="MyListBox" SelectionMode="Single" ItemsSource="{Binding MyItemsSource}" IsReorderEnabled="True"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Tap"> 
      <command:EventToCommand Command="{Binding EditItemCommand}" CommandParameter="{Binding ElementName=MyListBox, Path=SelectedItem}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
    <rlb:ReorderListBox.ItemTemplate> 
     <DataTemplate> 
      <ScrollViewer Margin="0,4" toolkit:TiltEffect.IsTiltEnabled="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding SomeProperty}" Style="{StaticResource BaseTextStyle}" FontSize="{StaticResource PhoneFontSizeMediumLarge}" FontFamily="Segoe WP SemiLight" VerticalAlignment="Center" /> 
        <Border Background="DarkGoldenrod" Margin="3" VerticalAlignment="Center"> 
         <TextBlock Margin="6,3" Text="{Binding AnotherProperty}" Foreground="White" FontFamily="Segoe WP Light" FontSize="16" VerticalAlignment="Center" TextAlignment="Right" /> 
        </Border> 
       </StackPanel> 
      </ScrollViewer> 
     </DataTemplate> 
    </rlb:ReorderListBox.ItemTemplate> 
</rlb:ReorderListBox> 

답변

0

는 시도 :

<rlb:ReorderListBox x:Name="MyListBox" SelectionMode="Single" 
          ItemsSource="{Binding MyItemsSource}" 
          IsReorderEnabled="True" 
          Height="400"> 
<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Tap"> 
     <command:EventToCommand Command="{Binding EditItemCommand}" CommandParameter="{Binding ElementName=MyListBox, Path=SelectedItem}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
<rlb:ReorderListBox.Template> 
    <ControlTemplate> 
     <ScrollViewer Margin="0,4" toolkit:TiltEffect.IsTiltEnabled="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <ItemsPresenter /> 
     </ScrollViewer> 
    </ControlTemplate> 
</rlb:ReorderListBox.Template> 
<rlb:ReorderListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding SomeProperty}" FontSize="{StaticResource PhoneFontSizeMediumLarge}" FontFamily="Segoe WP SemiLight" VerticalAlignment="Center" /> 
      <Border Background="DarkGoldenrod" Margin="3" VerticalAlignment="Center"> 
       <TextBlock Margin="6,3" Text="{Binding AnotherProperty}" Foreground="White" FontFamily="Segoe WP Light" FontSize="16" VerticalAlignment="Center" TextAlignment="Right" /> 
      </Border> 
     </StackPanel> 
    </DataTemplate> 
</rlb:ReorderListBox.ItemTemplate> 

,

ScrollViewer을 만들기 위해 높이를 지정해야하므로 중요합니다.

그러나 작업을 잘못 선택하게합니까? 여러 항목이 선택되는 것과 마찬가지로 ... 컨트롤 자체 나 버그가 있는지 알 수 없습니다.

난 후 처리, 이벤트 대신 을 인 selectionchanged 사용하고 실제가 선택되어 항목을 좀하려고합니다.

+0

SelectionChanged를 사용할 수 없습니다. 지난 번에 같은 항목을 누르거나 하나의 항목 만있는 경우 해당 항목이 실행되지 않기 때문에 실행되지 않습니다. 나는 그것을 전에 사용하고 있었다. – sohum