バックグラウンド
オブジェクトをにバインドしようとしています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));
}
}
}
リストの最初の項目の 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
を取得してそこからデータを取得するように指定する方法がわかりません。StringBindingData
phoneVm
これを機能させるために XAML に追加する必要があるものはありますか? コードに追加できるものは他にありますか? データ モデルを変更する必要がありますか?