1

背景

我正在尝试将我的对象绑定到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));
        }
    }
}

列表中第一项的 Description 属性StringBindingData可能包含“名称”,而 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 以使其正常工作吗?还有什么我可以添加到代码中的吗?我需要更改我的数据模型吗?

4

1 回答 1

1

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

于 2012-05-18T08:24:24.610 回答