2012-11-06 116 views
0

我一直在嘗試將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> 

我已經嘗試了很多事情,包括把與數據網格代替或以及datagridtextcolumns(的ItemSource等)的結合,定義代碼的DataContext(我想盡可能地保持了代碼爲mvvm的原因),使用路徑和來源,也試圖將我的兩個數組在一個類(這不是我真正想要的)。然而,即使下面的簡單測試用例正確綁定數據網格,也沒有任何工作可做。

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

任何人有任何想法?

對,也許我應該把我的解決方案放在這裏,但這有點長,所以我把它作爲答案。無論如何,這是多種方式之一,所以如果你覺得如此傾向,請發表另一個答案。

回答

2

需要綁定到單個源

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

創建

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

綁定數據網格到地址經過

然後在列結合的路徑,從和儀表

2

因爲你不能綁定到私人領域的開始,你需要讓他們一個公共財產:(請注意,我省略屬性設置通知)

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

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

第二問題是你不應該像這樣將DataColumn綁定到繼承數據上下文的獨立屬性 - 它必須是bound to a property of the item contained in the IEnumerable,你必須綁定到ItemsSource of the gridHere is another sample

希望這些鏈接會有一些幫助,他們至少應該讓你開始。

0

當你沒有任何方法來顯示我的東西時,WPF向你介紹了一個非常有用的東西nto查看您的對象。你可以使用轉換器。我相信這個轉換器系統將幫助你改善你想要的方式。

創建一個轉換器,它接受一個數組並返回類似串聯項目的字符串或可能是您想要的某個東西。 也做轉換從顯示值到對象。在兩側同步。

1

對,謝謝你的回答。下面是我如何解決它到底:我在主類

dataGrid1.DataContext = Addresses; 

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

在輸入方法主要類

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() 
    { 
    } 
} 

這上面額外的I類明顯

需要具有:

<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> 
+0

我知道只是示例代碼,但可能會在同一迴路做儀表和奴隸。 – Paparazzi

+0

我後來在地址類上做了一些INotifyPropertyChanged工作,並將列表更改爲Observatible集合,以使綁定更好地工作。只是想我會說。 –