2014-10-20 3 views
0

Я пытаюсь отправить в модель представления текущий элемент управления FlipView с использованием MVVM Light.Отправить FlipViewItem как RelayCommandParameter в приложении Windows Store

Часть XAML код, представляющий элемент управления FlipView заключается в следующем:

<FlipView x:Name="mainFlipView" Margin="0,10,0,10" ItemsSource="{Binding AlbumItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
    <FlipView.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="5"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="Auto" /> 
       </Grid.RowDefinitions> 

       <TextBlock Text="{Binding Caption}" 
         FontSize="23" 
         HorizontalAlignment="Center" 
         TextAlignment="Center" 
         TextWrapping="Wrap" 
         Margin="10"/> 

       <ScrollViewer Grid.Row="1" ZoomMode="Enabled"> 
        <uc:ImageViewer FilePath="{Binding ImagePath}" /> 
       </ScrollViewer> 

       <TextBlock Text="{Binding NrOfVotes}" FontSize="20" 
         Grid.Row="2" HorizontalAlignment="Center"       
         Margin="10" /> 
      </Grid> 
     </DataTemplate> 
    </FlipView.ItemTemplate> 
</FlipView> 
... 

Часть XAML код элемента, содержащего команду реле:

<Page.BottomAppBar> 
    <CommandBar> 
     <AppBarButton x:Name="appBarButtonDelete" Label="Delete" Icon="Delete" 
         Command="{Binding DeleteItemCommand}" 
         CommandParameter="{Binding ElementName=mainFlipView, Path=SelectedItem}"/> 
    </CommandBar> 
</Page.BottomAppBar> 

В ViewModel, то RelayCommand объявляется и используется следующим образом:

public class ResultsPageViewModel : ViewModelBase 
{ 
    public RelayCommand<MyModel> DeleteItemCommand { get; private set; } 

    public ResultsPageViewModel() 
    { 
     this.DeleteItemCommand = new RelayCommand<MyModel>(post => DeleteItem(post)); 
    } 

    public void DeleteItem(MyModel p) 
    { 
     //P is always null here... 
    } 
} 

Проблема в том, что в DeleteItem Функция всегда получает параметр null. Я попытался объявить RelayCommand как RelayCommand<object>, но проблема не устранена.

Я также пробовал метод «обходного пути», объявляющий связующее свойство MyModel и привязывая его к FlipView. Это работает, но я хотел бы знать, что я делаю неправильно в этой ситуации.

Спасибо заранее!

+1

Что такое тип AlbumItems? – bit

+0

Это 'ObservableCollection ' – rhcpfan

+0

любые идеи? благодаря! – rhcpfan

ответ

0

Попробуйте другую стратегию: используйте параметр непосредственно из ViewModel после правильной привязки.

XAML

<FlipView x:Name="mainFlipView" 
      Margin="0,10,0,10" 
      ItemsSource="{Binding AlbumItems, Mode=TwoWay }" 
      SelectedItem="{Binding AlbumSelectedItem, Mode=TwoWay}"> 

ViewModel

private MyModel albumSelectedItem; 
public MyModel AlbumSelectedItem 
{ 
    get 
    { 
     return albumSelectedItem; 
    } 

    set 
    { 
     if (value != null && albumSelectedItem != value) 
     { 
      albumSelectedItem = value; 
      RaisePropertyChanged(() => AlbumSelectedItem); 
     } 
    } 
} 

public void DeleteItem(MyModel p) 
{ 
    //P is always null here... 
    var pp = AlbumSelectedItem; 
} 

Очевидно, что CommandParameter бесполезно. ;-)