2014-04-15 3 views
2

네트워킹 기반 응용 프로그램에서 응용 프로그램이 C#을 사용하는 네트워킹 장치와 연결됩니다. 프런트 엔드는 WPF에 있습니다. 문제는 특정 명령을 실행 한 후 데이터를 추출하고 추출한 후에 DataGrid에 표시하려고합니다. 데이터가 내가 필요로하는 정규식을 사용하여 제대로 추출한다하지만 난에서 Datagrid에 표시 할 부분은 콘솔에 표시되고 있지만 표시되지 올바르게 .CODE은 다음과 같습니다WPF DataGrid 바인딩 오류?

public class IPMAC 
{ 
    public string ip { get; set; } 
    public string mac { get; set; } 
} 

List<IPMAC> ipmac = new List<IPMAC>(); 
string pattern = @"(F8-F7-D3-00\S+)"; 
MatchCollection matches = Regex.Matches(stringData, pattern); 

foreach (Match match in matches) 
{ 
    Console.WriteLine("Hardware Address : {0}", match.Groups[1].Value); 
    ipmac.Add(new IPMAC(){mac=match.Groups[1].Value}); 
} 
string pattern2 = @"(192.168.1\S+)"; 
MatchCollection matchesIP = Regex.Matches(stringData, pattern2); 

foreach (Match match in matchesIP) 
{ 
    Console.WriteLine("IP Address : {0}", match.Groups[1].Value); 
    ipmac.Add(new IPMAC() { ip = match.Groups[1].Value }); 

XAML은 다음과 같습니다

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="250"/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <DataGrid Name="dg" Grid.Row="0" Height="250" AutoGenerateColumns="False" >  
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Mac Addresses" Binding="{Binding Path=mac}"/> 
      <DataGridTextColumn Header="IP Addresses" Binding="{Binding Path=ip}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

간단히 말해서 나는 그것이 콘솔 상에 나타나고있는 것처럼 DataGrid에 출력을 표시하는 방법을 이해하지 못한다. e. 도와주세요 ??

dg.ItemsSource = ipmac; 

하거나 아래 단계에 따라 DataBinding를 사용할 수 있습니다 :

+0

;'? – har07

답변

1

간단한 방법은, 코드에서 ItemsSource을 설정하여 목록이 채워 된 후 DataGridIPMAC의 목록을 표시합니다

  • 설정 DataContext. 데이터 바인딩은 현재 데이터 컨텍스트에서 바인딩 경로를 확인하기 때문입니다.
  • ObservableCollection의 공공 재산으로 ipmac을 선언하십시오. ObservableCollection에는 컬렉션에 추가되거나 컬렉션에서 항목이 제거 될 때마다 UI에 새로 고침을 알리는 메커니즘이 내장되어 있습니다. 그리고 데이터 바인딩은 멤버/필드에서 작동하지 않습니다.
  • 바인드 ItemsSource~ipmac 속성.

코드 조각 시연 위의 단계 : 어떻게`dg.ItemsSource = ipmac에 대한

//declare ipmac as public property 
public ObservableCollection<IPMAC> ipmac { get; set; } 

//In constructor : initialize ipmac and set up DataContext 
ipmac = new ObservableCollection<IPMAC>(); 
this.DataContext = this; 

//In XAML : bind ItemsSource to ipmac 
<DataGrid ItemSource="{Binding ipmac}" Name="dg" ... /> 
+0

+1 내 답변보다 철저한 답변을 원합니다! – gleng

+0

그것은 내 문제를 지금 큰 감각을 해결했지만 한 줄에 IP 주소와 두 번째 줄에 IP 주소를 표시하는 것이 하나 더 중요 할 것입니다. – TheSpy

+0

그건 이상합니다. 더 많은 정보 없이는 아무 생각이 없습니다. 잘못된 데이터로 채워진 컬렉션이 아닌 것이 확실합니까? – har07

관련 문제