如何找到刚刚添加到我的数据绑定 ListView 中的项目索引

How to find item index just added into my data binding ListView

ListView 绑定了我的 collection:

private ObservableCollection<MyData> files{ get; set; }

<ListView Name="listview" ItemsSource="{Binding files}" >

public MyData
{
   public string FileName { get; set; }
   public DateTime dateTime { get; set; }
   public int index { get; set; }
}

将项目添加到我的 collection:

MyData myData...
files.Add(myData);
listview.ItemsSource = files;

现在我想添加从列表中删除所选 file\files 的选项,因此我添加了右键单击菜单:

<ContextMenu>
    <MenuItem Name="removeFileMenuItem" Header="Remove file"
             Click="removeFileMenuItem_Click">
    </MenuItem>
</ContextMenu>

因此,当将文件添加到我的 collection 时,我想获取项目索引,当我想删除该项目时,我将以这种方式使用它:

private void removeFileMenuItem_Click(object sender, RoutedEventArgs e)
{
      if (listview.SelectedIndex == -1)
          return;
      MyData myData = listview.SelectedItem as MyData;
      if (myData != null)
      {
         file.RemoveAt(myData.index);
      }
}

只需使用ObservableCollectionclass的Remove方法即可。它找到您传入的对象并将其从集合中删除。

    private void removeFileMenuItem_Click (object sender, RoutedEventArgs e)
    {
        if (listview.SelectedIndex == -1)
            return;
        MyData myData = listview.SelectedItem as MyData;
        if (myData != null)
        {
            file.Remove (myData);
        }
    }

您可以使用 SelectedItem 而不是使用 SelectedIndex,因此您可以直接使用您选择的 data model,随后将其删除,他的方法如下所示:

private void removeFileMenuItem_Click (object sender, RoutedEventArgs e)
{
    var myData = listview.SelectedItem as MyData;
    if (myData != null)
        files.Remove (myData);
}

如果你以这种方式使用,你不需要property index,你可以实现Equals方法来通知模型相等规则,在这种情况下我'我们会考虑您的规则是 FileName property。您的数据模型如下所示:

public MyData
{
   public string FileName { get; set; }
   public DateTime dateTime { get; set; }

   public override bool Equals(object obj)
   {
       if (!(obj is MyData)) return false;
       return this.FileName.Equals(
              ((MyData)obj).FileName);
   }
}