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

时间:2014-09-03 07:34:11

标签: c# xaml windows-phone-7 windows-phone-8 caliburn.micro

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

<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*/);
    }

那么我如何获得选择联系人的索引?

2 个答案:

答案 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);
}