获取可绑定集合中项的索引

本文关键字:索引 集合 绑定 获取 | 更新日期: 2023-09-27 18:20:23

在此列表框中,我显示联系人姓名。

<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中激发PropertyChangedint类型的属性。

然后,您可以在Viewmodel中的任何位置轻松访问所选项目的索引:

public void delete()
{
    Items.RemoveAt(SelectedListIndex);
}