2012-05-18 57 views
1

背景如何將對象列表綁定到DataGrid?

我想我的對象綁定到一個DataGrid

PhoneVM對象的列表。列表中的每個項目都包含一個StringBindingData的列表。我需要每個項目StringBindingData以對應不同的細胞在DataGrid

每個項目詮釋他的列表中對應不同的值用戶的配置,包括DescriptionValue一行。

PhoneVM被定義爲:

public class PhoneVM 
{ 
    public List<StringBindingData> StringBindingData { get; private set; } 

    public PhoneVM() 
    { 

    } 
} 

StringBindingData被定義爲:

public class StringBindingData : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public string Description { get; set; } 

    private string _value; 
    public string Value 
    { 
     get { return _value; } 
     set 
     { 
      OnPropertyChanged("Value"); 
     } 

    } 

    public StringBindingData(string data, string description) 
    { 
     Value = data; 
     Description = description; 
    } 

    internal void OnPropertyChanged(string prop) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
     } 
    } 
} 

StringBindingData列表中的第一個項目的Description屬性可能含有「名稱」和值屬性將包含實際的名稱。列表中第二項的Description屬性可能包含「電話號碼」,而Value屬性將包含實際的號碼。

問題

我想這些綁定到DataGrid。我怎樣才能做到這一點?

我至今是第一列綁定到名稱

<DataGrid Name="phoneGrid" AutoGenerateColumns="False" Height="150" Width="Auto" 
      SelectionMode="Single" SelectionUnit="FullRow" Margin="10,10,0,0" 
      HorizontalAlignment="Left" VerticalAlignment="Top" SelectionChanged="phoneGrid_SelectionChanged"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" 
      x:Name="columnPhoneNumber" 
      Binding="{Binding Path=Value}" 
      IsReadOnly="True"> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

有了這個後面的代碼企圖:

public Phone(List<PhoneVM> phoneVm) 
{ 
    InitializeComponent(); 

    phoneGrid.DataContext = phoneVm; 
} 

但即使看代碼很顯然是錯誤的。我不知道如何指定DataContext我希望它從phoneVm獲得StringBindingData對象並從中獲取數據。

有什麼我需要添加到XAML來得到這個工作?有什麼我可以添加到代碼?我是否需要更改我的數據模型?

回答

1

正如您所說,您錯過了對視圖模型中StringBindingData屬性的綁定。嘗試將ItemsSource="{Binding StringBindingData}"添加到您的DataGrid。

+0

只要數據進入網格,這就是個竅門。不幸的是,它是垂直顯示數據而不是水平顯示,即以列形式而不是行形式顯示。 – DaveDev