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}”
添加到您的数据网格。这就可以将数据添加到网格中。不幸的是,它是垂直而不是水平地显示数据,即以列的形式而不是以行的形式显示数据。这在将数据放入网格时起到了作用。不幸的是,它是垂直而不是水平地显示数据,即以列的形式而不是以行的形式显示数据。