在此列表框中,我显示联系人姓名。
<ListBox x:Name="Items" Margin="36,38,78,131">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="lol" Text="{Binding Path=ContactName}" Style="{StaticResource PhoneTextSmallStyle}"
Width="Auto" TextAlignment="Center" FontWeight="Bold" Foreground="White" VerticalAlignment="Bottom" TextWrapping="Wrap"/>
<Button x:Name="ShowName">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="delete" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我从本地数据库获取联系人
public List<FBContacts> listContactDatas { get; set; }
Items = new BindableCollection<FBContacts>();= new BindableCollection<FBContacts>();
public void GetContacts()
{
using(MyDataContext mydb = new MyDataContext(DBConnectionstring))
{
var items = from ContactsList Name in mydb._contacts select Name;
foreach (var toDoItem in items)
{
Items.Add(new FBContacts()
{
ContactName = toDoItem.Name
});
}
}
}
用户可以删除任何联系人,只要他按下按钮。
public void delete()
{
Items.RemoveAt(/* index*/);
}
那么我怎样才能得到所选联系人的索引呢?
如果将单击的FBContacts
传递给delete
方法会更容易:
<Button x:Name="ShowName">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="delete">
<cal:Parameter Value="{Binding}" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
然后您可以通过FBContacts
对象而不是索引删除:
public void delete(FBContacts item)
{
Items.Remove(item);
}
将当前所选项目的索引绑定到一个单独的属性:
<ListBox x:Name="Items" SelectedIndex="{Binding SelectedListIndex}" Margin="36,38,78,131">
当然,SelectedListIndex
必须定义为在Viewmodel中激发PropertyChanged
的int
类型的属性。
然后,您可以在Viewmodel中的任何位置轻松访问所选项目的索引:
public void delete()
{
Items.RemoveAt(SelectedListIndex);
}