C# 绑定数据网格
我一直在尝试将DataGridTextColumns按列绑定到数组(我想是int[]),但没有成功。我在msdn、stackoverflow等方面没有发现特别有用的东西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
<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更改的内容,并将列表更改为可观察的集合,以使绑定工作得更好。我只是想说。