背景
我正在尝试将对象绑定到DataGrid
我有一个PhoneVM
个对象的列表。列表中的每个项目都包含StringBindingData
列表。我需要StringBindingData
中的每个项目对应一个DataGrid行中的不同单元格
列表中的每个项目对应于用户配置的不同值,包括Description
和Value
。
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属性可能包含“Name”,Value属性将包含实际名称。列表中第二项的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
指定我希望它从StringBindingData
获取phoneVm
个对象并从中获取数据。
我是否需要添加到XAML以使其正常工作?我还可以在代码中添加其他内容吗?我需要更改我的数据模型吗?
答案 0 :(得分:1)
正如您所说,您在视图模型中缺少对StringBindingData
属性的绑定。尝试将ItemsSource="{Binding StringBindingData}"
添加到DataGrid。