1

バックグラウンド

オブジェクトをにバインドしようとしていますDataGrid

オブジェクトのリストがありPhoneVMます。リスト内の各項目には、 のリストが含まれていますStringBindingDataStringBindingDataDataGrid の行の異なるセルに対応する各項目が必要です

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));
        }
    }
}

リストの最初の項目の Description プロパティにStringBindingDataは "Name" が含まれ、Value プロパティには実際の名前が含まれる場合があります。リストの 2 番目の項目の 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;
}

しかし、コードを見ても明らかに間違っています。オブジェクトDataContextを取得してそこからデータを取得するように指定する方法がわかりません。StringBindingDataphoneVm

これを機能させるために XAML に追加する必要があるものはありますか? コードに追加できるものは他にありますか? データ モデルを変更する必要がありますか?

4

1 に答える 1

1

あなたが言うようStringBindingDataに、ビュー モデルのプロパティへのバインディングがありません。ItemsSource="{Binding StringBindingData}"DataGrid に追加してみてください。

于 2012-05-18T08:24:24.610 に答える