2011-06-18 111 views
-1

项目不是从列表项目不是从列表中删除

去除这里是我的代码:

public interface IEmpConnection 
{ 
    int SegId { get; set; } 
} 

public class EmpConnection : IEmpConnection 
{ 

    private int segid; 
    public int SegId 
    { 
     get 
     { 
      return segid; 
     } 
     set 
     { 
      segid = value; 
     } 
    } 
} 

public class CustomerConnection : EmpConnection, ICustomerConnection 
{ 

    private int _id; 

    public int Id 
    { 
     get 
     { 
      return _id; 
     } 
     set 
     { 
      _id = value; 
     } 
    } 
} 

public interface ICustomerConnection 
{ 
    int Id { get; set; } 


} 

public class CustConn : CustomerConnection 
{ 
    private ObservableCollection<CustomerConnection> _airSeg; 

    public CustConn() 
    { 
     _airSeg = new System.Collections.ObjectModel.ObservableCollection<CustomerConnection>(); 
     _airSeg.Add(new AirSegmentConnection { Id = 1, SegId = 2 }); 
     _airSeg.Add(new AirSegmentConnection { Id = 1, SegId = 3 }); 
    } 

    private bool isDeleted; 

    public bool IsDeleted 
    { 
     get { return isDeleted; } 
     set { isDeleted = value; } 
    } 

    private List<IEmpConnection> _connection; 
    public List<IEmpConnection> Connections 
    { 
     get 
     { 
      var s = new AirSegmentConnection(); 
      var k = s as ISegmentConnection; 

      if (IsDeleted) 
      { 
       _airSeg.RemoveAt(1); 
      } 

      return _connection = _airSeg.ToList().Cast<ISegmentConnection>().ToList(); 
      //return _airSeg.ToList().Cast<ISegmentConnection>().ToList(); 
     } 

     set 
     { 
      _connection = value; 
      //_airSeg = new System.Collections.ObjectModel.ObservableCollection<ISegmentConnection>(value.ToList()) ; 
     } 
    } 

    private ObservableCollection<CustomerConnection> airConnection; 

    public ObservableCollection<CustomerConnection> AirConnection 
    { 
     get { return _airSeg; } 
     set { _airSeg = value; } 
    } 
} 

上主要

按一下按钮项目不被删除。请建议我在哪里做错了。

CustConn a = new CustConn(); 
if (a.Connections.Count > 0) 
{ 
    a.Connections = new List<IEmpConnection>(); 
    a.Connections.RemoveAt(1);// this item is not being removed. 
} 

请建议我在这段代码中做worng。

感谢 阿米特

+0

您能提供有关建议答案的反馈意见。我注意到你又发布了这个问题。这些答案是否不符合您的需求?发生了什么? –

回答

1

你正在创建一个新的空列表,然后试图在位置1,其实你只是覆盖原来的列表中删除的元素。

if (a.Connections.Count > 0) 
{ 
    /// REMOVE THIS LINE a.Connections = new List<IEmpConnection>(); 
    a.Connections.RemoveAt(1);// this item is not being removed. 
} 

行我注释掉它创建一个新的列表,并覆盖a.Connections您尝试删除该项目之前。这是导致代码失败的原因。

+0

我将两个项目放入连接列表中,但项目编号1未被删除返回返回2项目。但为什么。 – Amit

+0

@明白这是因为你正在用我已注释过的行覆盖** a.Connections。 – ChrisF

1

在删除连接之前,您似乎正在替换连接列表。

由于您已将此标记为WPF,因此我将假定在某些时候您可以从列表中删除该项目,但它仍然出现在屏幕上。试试这个:

if (a.Connections.Count > 0) 
{ 
    var newList = new List<IEmpConnection>(a.Connections); 
    a.Connections.RemoveAt(1); 
    a.Connections = newList; 
} 

或者,你可以使用一个ObservableCollection<IEmpConnection>。这是一个特殊的集合,当集合发生变化时引发事件。然后,您可以简单地删除该对象,并更新屏幕。

+0

它正在工作var newList = new List (a.Connections); a.Connections.RemoveAt(1); a.Connections = newList; – Amit

+0

这是很好的知道。在接受答案之前还有什么需要帮助的吗? –

+0

连接是列表的类型,所以当项目从列表中删除,然后我想发送通知列表被修改为UI。但通知不被支持List.in这个代码有任何方式发送通知到用户界面后列表被修改。 – Amit