2013-11-18 4 views
0

У меня есть ListView, привязанный к ObservableCollection, и кнопка «Удалить».Используйте CommandParameter с кнопкой за пределами ListView

Я хочу удалить выбранный элемент из списка ListView при нажатии кнопки «Удалить», но я не могу найти способ передать выбранный элемент в CommandParameter Button.

<Button Content="Delete" Command="{Binding DeleteCommand}" CommandParameter="{Binding ?}" /> 
<ListView ItemsSource="{Binding Path=UserList}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemeberBinding="{Binding Name}" /> 
      <GridViewColumn DisplayMemeberBinding="{Binding Age}" />      
     </GridView> 
    </ListView.View> 
</ListView> 

Как вы могли это сделать?

ответ

1

Вы можете использовать ElementName Переплет:

<Button Content="Delete" Command="{Binding DeleteCommand}" 
     CommandParameter="{Binding SelectedItem, ElementName=MyListView}" /> 
<ListView ItemsSource="{Binding Path=UserList}" x:Name="MyListView"> 

Edit:

Если вы не хотите использовать x:Name (по каким-либо причинам) вы можете создать SelectedItem свойство в вашем ViewModel и свяжите свойство ListView.SelectedItem с этим. Таким образом, вам не нужно CommandParameter вообще, потому что у вас уже есть эта информация на уровне ViewModel:

public class MyViewModel 
{ 
    public MyData SelectedItem {get;set;} //NotifyPropertyChanged(), etc. 

    public DelegateCommand DeleteCommand {get;set;} 

    void OnDelete() 
    { 
     //Here you delete SelectedItem, no need for CommandParameter 
    } 
} 

XAML:

<Button Content="Delete" Command="{Binding DeleteCommand}"/> 
<ListView ItemsSource="{Binding Path=UserList}" 
      SelectedItem="{Binding SelectedItem}"> 

Side Комментарий:x:Name это прекрасно.

+0

Я не хочу использовать x: Имя, есть ли правильный путь! –

+2

@ Шнайдер почему нет? - Это правильный путь. В противном случае поместите свойство 'T SelectedItem {get; set;}' в ваш ViewModel, я не понимаю вашу точку, хотя –

+0

Это может быть отличная идея, вы имеете в виду, что я поставил элемент ListView в мой ViewModel и связал CommandParameter к этому пункту? –

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