2014-06-18 3 views
-3

저는 C# WPF를 사용하는 네트워킹 기반 응용 프로그램을 만들고 있습니다. 이 응용 프로그램의 목적은 백엔드에서 실행되는 텔넷 명령을 통해 네트워킹 장치를 구성하는 것입니다.ObservableCollection에서 값을 채우는 방법?

내가 붙어있는 문제는 사용자가 추가 한 DataGrid에 여러 값이 표시되어 이제 모든 값을 반복하고 장치를 구성하려고합니다. 내가 ObservableCollection 값을 datagrid에서 개최하지만 foreach 루프에서 나는 모든 값을 통해 반복하고 문제가 내 ObservableCollection 비어 있다고 생각하기 때문에 그들을 채울 수 없습니다. 데이터를 채울 수있는 방법을 알려주십시오.

public ObservableCollection<VLANSPropertyClass> vlan { get; set; } 

public bool VLAN() 
     { 
      vlan = new ObservableCollection<VLANSPropertyClass>(); 

      string _command; 

      _command = "config t \n"; 
      WriteAPCommand(_command); 

      ReadAPCommand(); 

      foreach(VLANSPropertyClass v in vlan) 
      { 
       Console.WriteLine("-----------------FOREACH STARTED----------------"); 
       _command = "vlan " + v.vid + "\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command = "name " + v.vname + "\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command = "interface " + v.vid + "\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command = "ip address " + v.ip + " " + v.mask + "\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command="exit\r"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command = "interface " + v.vports + "\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command = "switchport access " + v.vid + "\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

       _command = "copy runningconfig startupconfig\n"; 
       WriteAPCommand(_command); 

       ReadAPCommand(); 

      } 
      Console.WriteLine("-----------------FOREACH COMPLETED----------------"); 
      return true; 

     } 

VLANSProperty 클래스는 다음과 같습니다 :

public class VLANSPropertyClass 
{ 
    public string vname { get; set; } 

    public int S_No { get; set; } 

    public string vid { get; set; } 

    public string ip { get; set; } 

    public string mask { get; set; } 

    public string vports { get; set; } 
} 

읽기 및 쓰기 방법이다 : 당신은 당신이 전에 데이터 컬렉션을 채울 필요가

public void WriteAPCommand(string _apCommand) 
     { 
      _telnetData = new byte[1024]; 
      _telnetData = Encoding.ASCII.GetBytes(_apCommand); 
      _networkstream.Write(_telnetData, 0, _telnetData.Length); 
      Thread.Sleep(2000); 
     } 

public string ReadAPCommand() 
     { 
      _telnetData = new byte[1024]; 
      _recvBytes = _networkstream.Read(_telnetData, 0, _telnetData.Length); 
      _stringData = Encoding.ASCII.GetString(_telnetData, 0, _recvBytes); 
      Console.WriteLine(_stringData); 
      return _stringData; 
     } 
+1

당신은 결코 추가되지 않은 : 당신은 외부 소스에서 데이터를 액세스하는 경우,

vlan = new ObservableCollection<VLANSPropertyClass>(); VLANSPropertyClass item = new VLANSPropertyClass("fill", "with", "valid", "values"); vlan.Add(item); 

또는 우리는 그 세부 사항 중 하나를 모르겠지만, 일반적으로, 당신은 이런 식으로 뭔가를 할 것입니다 당신의'vlan' 컬렉션에 무엇이든. – gleng

+0

아마 [관련 질문] (http://stackoverflow.com/questions/24259257/compiler-skipping-foreach-loop-during-compilation) 및 [채팅] (http://chat.stackoverflow.com/rooms/55762/) discussion-between-codesniper-and-jon-skeet) – EKrueger

답변

0

여기

내 코드입니다 그것을 반복하고 항목 값으로 무엇이든 할 수 있습니다. 컬렉션을 채우는 방법과 데이터를 가져 오는 방법은 전적으로 귀하에게 달려 있습니다.

foreach (VLANSPropertyClass item in SomeDataAccessMethodThatReturnsACollection) 
{ 
    vlan.Add(item); 
} 
+0

두 번째 옵션에 따르면 .my 속성'vlan'은 viewmodel에 있지만 클래스 이름으로 모델에 액세스하고 있지만 액세스 할 수 없습니다. 'vlan' 데이터에 액세스 할 수 있으면 데이터 그리드에 바인딩됩니다. 데이터를 채울 수 있습니다. 모델에서'vlan' 속성에 액세스 할 수 있도록 내게 알려주십시오. – Sapper

+0

모델로 무엇을 말하고 있습니까? – Sheridan

+0

모델은 비즈니스 로직을 구현했지만 내 ViewModel에 구현 된 내 vlan 속성 때문에 ViewModel의 vlan 속성에 데이터를 채울 수있는 것보다 액세스 할 수있는 경우 null 참조 예외가 발생합니다. – Sapper

관련 문제