C# 绑定数据网格

C# 绑定数据网格,c#,wpf,data-binding,binding,datagrid,C#,Wpf,Data Binding,Binding,Datagrid,我一直在尝试将DataGridTextColumns按列绑定到数组(我想是int[]),但没有成功。我在msdn、stackoverflow等方面没有发现特别有用的东西 <DataGrid AutoGenerateColumns="False" VerticalAlignment="Top" Margin="0,47,0,0" Height="351" Name="dataGrid1" IsReadOnly="True" CanUserAddRows="False" CanUserDele

我一直在尝试将DataGridTextColumns按列绑定到数组(我想是int[]),但没有成功。我在msdn、stackoverflow等方面没有发现特别有用的东西

<DataGrid AutoGenerateColumns="False" VerticalAlignment="Top" Margin="0,47,0,0" Height="351" Name="dataGrid1" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Slave Address" Width="100" Binding="{Binding SlaveAddressValues}"/>
        <DataGridTextColumn Header="Meter Readings" Width="100" Binding="{Binding MeterReadingValues}"/>
    </DataGrid.Columns>
</DataGrid>
有人有什么想法吗


是的,也许我应该把我的解决方案放在这里,但它有点长,所以我把它作为一个答案。不管怎么说,这是许多方法之一,因此如果您有兴趣,请发布另一个答案。

首先,您不能绑定到私有字段,您需要将它们设置为公共属性:

private int[] _slaveAddressValues = { 0, 0, 0, 0 };

public int[] SlaveAddress 
{
    get { return _slaveAddressValues; }
    set { _slaveAddressValues = value; }
}
(请注意,我省略了属性设置通知。)

第二个问题是,您不应该像这样将DataColumn绑定到继承数据上下文的独立属性-需要绑定到


希望这些链接能有所帮助,它们至少可以帮助您入门。

首先,您不能绑定到私有字段,您需要将它们设置为公共属性:

private int[] _slaveAddressValues = { 0, 0, 0, 0 };

public int[] SlaveAddress 
{
    get { return _slaveAddressValues; }
    set { _slaveAddressValues = value; }
}
(请注意,我省略了属性设置通知。)

第二个问题是,您不应该像这样将DataColumn绑定到继承数据上下文的独立属性-需要绑定到


希望这些链接能对您有所帮助,它们至少可以让您开始使用。

需要绑定到单个源

class  Address
{
    public Int Slave { get; set; }
    public Int Meter { get; set; }
}
创造

Public List<Address>  Addresses { get; set; }
公共列表地址{get;set;}
将DataGrid绑定到AddAddress


然后在列上将路径绑定到从属路径,而Meter需要绑定到单个源

class  Address
{
    public Int Slave { get; set; }
    public Int Meter { get; set; }
}
创造

Public List<Address>  Addresses { get; set; }
公共列表地址{get;set;}
将DataGrid绑定到AddAddress


然后在列上,将路径绑定到Slave和Meter

当您无法将对象显示到视图中时,WPF为您介绍了一件非常有用的事情。你可以使用转换器。我相信这个转换系统将帮助你的方式罚款你想要的

创建一个转换器,它接受一个数组并返回类似于串接项的字符串,或者可能是您想要的东西。
并将显示值转换回对象。当您无法将对象的内容显示到视图中时,WPF为您提供了一个非常有用的工具。你可以使用转换器。我相信这个转换系统将帮助你的方式罚款你想要的

创建一个转换器,它接受一个数组并返回类似于串接项的字符串,或者可能是您想要的东西。
并将显示值转换回对象。用于两侧的同步。

对,谢谢您的回答。下面是我最终解决问题的方法:

public List<Address> Addresses = new List<Address>();
在主类的entry方法中

dataGrid1.DataContext = Addresses;
for(int i=0; i<10; i++)
{
    Addresses.Add(new Address(){Meter = "",Slave = i});
}

for (int i = 0; i < 10; i++)
{
    Addresses[i].Meter = Convert.ToString(i);
}
这显然是我需要的额外课程

与:


好的,谢谢你的回答。下面是我最终解决问题的方法:

public List<Address> Addresses = new List<Address>();
在主类的entry方法中

dataGrid1.DataContext = Addresses;
for(int i=0; i<10; i++)
{
    Addresses.Add(new Address(){Meter = "",Slave = i});
}

for (int i = 0; i < 10; i++)
{
    Addresses[i].Meter = Convert.ToString(i);
}
这显然是我需要的额外课程

与:



我只知道示例代码,但可以在同一个循环中执行Meter和Slave。后来我在Address类上执行了一些InotifyProperty更改的内容,并将列表更改为可观察的集合,以使绑定工作得更好。我只是想说。我只知道示例代码,但可以在同一个循环中执行Meter和Slave。后来我在Address类上执行了一些InotifyProperty更改的内容,并将列表更改为可观察的集合,以使绑定工作得更好。我只是想说。