繁体   English   中英

绑定数据网格

[英]Binding datagrid

我一直在尝试将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>

我已经尝试了很多方法,包括使用datagrid或datagridtextcolumns(itemsource等)进行绑定,在代码中定义datacontext(出于mvvm的原因,我希望尽可能地避免使用代码),使用路径和源代码,并尝试将我的两个数组组合到一个类中(无论如何我都不是真正想要的)。 但是,即使使以下简单测试用例正确绑定到数据网格也没有任何效果。

private int[] SlaveAddressValues = { 0, 0, 0, 0 };
private int[] MeterAddressValues = { 2, 2, 2, 3 };

任何人有任何想法吗?

是的,也许我应该把我的解决方案放在这里,但是它有点长,所以我把它作为答案。 无论如何,这是许多方式中的一种,因此,如果您愿意,可以发布另一个答案。

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

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

public int[] SlaveAddress 
{
    get { return _slaveAddressValues; }
    set { _slaveAddressValues = value; }
}

(请注意,我省略了属性设置通知。)

第二个问题是,您不应像这样将DataColumn绑定到继承的数据上下文的独立属性-它需要绑定到已绑定到网格ItemsSource 的IEnumerable包含的项目的属性。 这是另一个示例

希望这些链接会有所帮助,至少应该使您入门。

需要绑定到一个来源

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

创造

Public List<Address>  Addresses { get; set; }

将DataGrid绑定到地址

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

是的,谢谢您的回答。 这是我最终解决的方法:

public List<Address> Addresses = new List<Address>();

在我的主要班级

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 class Address
{
    public int Slave { get; set; }
    public string Meter { get; set; }

    public Address()
    {
    }
}

这显然是我需要的额外课程

有:

<DataGrid Name="dataGrid1" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Slave Address" Binding="{Binding Path=Slave}"/>
                <DataGridTextColumn Header="Meter Readings" Binding="{Binding Path=Meter}"/>
            </DataGrid.Columns>
        </DataGrid>

当您无法以任何方式在对象中显示事物时,WPF会为您带来非常有用的东西。 您可以使用转换器。 我确信此Converter系统将帮助您完善所需的方式。

创建一个采用数组的Converter,并返回类似串联项的字符串之类的东西,或者可能是您想要的东西。 并将从显示值转换回对象。 双方同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM