簡體   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