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

时间:2012-05-18 08:04:09

标签: c# wpf xaml binding 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属性可能包含“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以使其正常工作?我还可以在代码中添加其他内容吗?我需要更改我的数据模型吗?

1 个答案:

答案 0 :(得分:1)

正如您所说,您在视图模型中缺少对StringBindingData属性的绑定。尝试将ItemsSource="{Binding StringBindingData}"添加到DataGrid。