我有一个绑定到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>
你怎么能这样做?
答案 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
完全没问题。