C# 如何将对象列表绑定到DataGrid?

C# 如何将对象列表绑定到DataGrid?,c#,wpf,xaml,binding,datagrid,C#,Wpf,Xaml,Binding,Datagrid,背景 我正在尝试将我的对象绑定到DataGrid 我有一个PhoneVM对象列表。列表中的每个项目都包含一个StringBindingData列表。我需要StringBindingData中的每个项对应于数据网格行中的不同单元格 列表中的每个项目对应于用户配置的不同值,包括Description和value PhoneVM定义为: public class PhoneVM { public List<StringBindingData> StringBindingData

背景

我正在尝试将我的对象绑定到
DataGrid

我有一个
PhoneVM
对象列表。列表中的每个项目都包含一个
StringBindingData
列表。我需要
StringBindingData
中的每个项对应于数据网格行中的不同单元格

列表中的每个项目对应于用户配置的不同值,包括
Description
value

PhoneVM
定义为:

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

    public PhoneVM()
    {

    }
}
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属性可能包含“Name”,Value属性可能包含实际名称。列表中第二项的Description属性可能包含“Phone Number”,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;
}
公用电话(列出phoneVm)
{
初始化组件();
phoneGrid.DataContext=phoneVm;
}
但即使看代码,它显然是错误的。我不知道如何为
DataContext
指定我希望它从
phoneVm
获取
StringBindingData
对象并从中获取数据


我是否需要向XAML中添加一些内容才能使其正常工作?还有什么我可以添加到代码中的吗?是否需要更改数据模型?

正如您所说,您缺少视图模型中
StringBindingData
属性的绑定。尝试将
ItemsSource=“{Binding StringBindingData}”
添加到数据网格。

正如您所说,您缺少视图模型中
StringBindingData
属性的绑定。尝试将
ItemsSource=“{Binding StringBindingData}”
添加到您的数据网格。

这就可以将数据添加到网格中。不幸的是,它是垂直而不是水平地显示数据,即以列的形式而不是以行的形式显示数据。这在将数据放入网格时起到了作用。不幸的是,它是垂直而不是水平地显示数据,即以列的形式而不是以行的形式显示数据。