将CommandParameter与ListView外部的按钮一起使用

时间:2013-11-18 13:42:28

标签: c# wpf xaml listview command

我有一个绑定到ObservableCollection的ListView和一个“删除”按钮。

当我点击“删除”按钮时,我想从ListView中删除所选项目,但是我找不到将所选项目传递给Button的CommandParameter的方法。

<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 个答案:

答案 0 :(得分:1)

您可以使用ElementName绑定:

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

修改

如果您不想使用x:Name(无论出于何种原因),您可以在ViewModel中创建SelectedItem属性并将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}">

旁边评论: x:Name完全没问题。