我正在研究基于网络的应用程序,应用程序使用C#连接到网络设备,前端是在WPF上。问题是我想在运行特定命令后提取数据,并且在提取后我希望它在DataGrid上显示。我正在使用正则表达式正确提取数据,但是我想在Datagrid上显示的部分没有显示,但它正在控制台上正确显示.Code是:
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>
简而言之,我不明白如何在数据网格上显示输出,因为它在Console上显示。请帮助??
答案 0 :(得分:1)
在IPMAC
中显示DataGrid
列表的最简单方法是,在填充列表后从代码中设置ItemsSource
:
dg.ItemsSource = ipmac;
或者您可以按照以下步骤使用DataBinding
:
DataContext
。因为数据绑定解析了当前数据上下文的绑定路径。ipmac
声明为ObservableCollection
类型的公共属性。 ObservableCollection
内置了一种机制,可以在项目添加到集合或从集合中删除时通知UI刷新。并且数据绑定不能与成员/字段一起使用。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" ... />