2011-06-18 108 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