2014-12-17 2 views
0

В WPF: Как передать индекс цикла ItemsSource в качестве параметра CommandParameter?Как передать индекс ItemsSource как CommandParameter в WPF

<ItemsControl ItemsSource="{Binding PageList}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button 
       Content="{Binding Name}" 
       Command="{Binding DataContext.ChangePageCommand, ElementName=Window}" 
       CommandParameter="INDEX OF ACTUAL ITEM AT ITEMSSOURCE GOES HERE" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Итак, я хочу передать номер нажатой кнопки методу Command.

Спасибо!

+0

Не можете использовать «DataContext» своего товара? –

+0

Можете ли вы не создать свойство в своей странице, чтобы вернуть его индекс в родительской коллекции? то вы можете передать это число в своем командном параметре – Krishna

ответ

0

Простой способ это сделать.

Во-первых, винтовые индексы. Они сосут. Привязать к SelectedItem

<ItemsControl ItemsSource="{Binding PageList}" SelectedItem="{Binding SelectedPage}"> 

Теперь, вы не должны пытаться передать индекс в параметр, так как выбранная страница уже находится в ViewModel.

// set in the ctor 
public ObservableCollection<Page> PageList {get;private set;} 
// Omitting INPC stuff in the setter 
public Page SelectedPage {get;set;} 

// Here's the Execute method of the ICommand 
private void ExecuteChangePageCommand(object parameter) 
{ 
    // lol screw the parameter 
    var currentPage = SelectedPage; 
    UpdateSelectedPageOrDoWhateverLolKthx(currentPage); 
} 
+0

Нет свойства «SelectedItem» в ItemsControl для меня ... – MorgoZ

+0

В любом случае, я не ищу способ получить выбранную страницу, мне нужно знать которая была нажата. Его позиция в списке и использование DataContext не является вариантом, поскольку каждый элемент не знает его позиции в списке. – MorgoZ

+0

@MorgoZ ah bugger. Я привык использовать ListBox. Что касается «позиции в списке», которая кажется очень странной. Почему ViewModel заботится о позиции элемента в пользовательском интерфейсе? Обычным шаблоном является «пользователь выбирает что-то, пользователь работает над чем-то, пользователь говорит VM что-то делать с этим». Для чего вы используете индекс? – Will

Смежные вопросы