在此列表框中,我显示联系人姓名。
<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*/);
}
那么我如何获得选择联系人的索引?
答案 0 :(得分:1)
将当前所选项目的索引绑定到单独的属性:
<ListBox x:Name="Items" SelectedIndex="{Binding SelectedListIndex}" Margin="36,38,78,131">
当然,必须将SelectedListIndex
定义为在{View}模式中触发int
的{{1}}类型的属性。
然后,您可以在Viewmodel中的任何位置轻松访问所选项目的索引:
PropertyChanged
答案 1 :(得分:1)
如果您将点击的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);
}