Вы должны создать класс модели представления, который предоставляет три свойства:
MasterTable
типа IEnumerable<MasterTableRow>
SelectedMaster
типа DataRowView
MasterDetails
типа IEnumerable<DetailsTableRow>
В вашей модели представления поместите свой экземпляр DataSet
и верните соответствующие значения для свойств. Чтобы завершить все это, вы должны реализовать INotifyPropertyChanged
и уведомления об изменениях для SelectedMaster
и MasterDetails
всякий раз, когда SelectedMaster
изменяется.
Не забудьте установить модель вида в качестве DataContext
для привязок.
Вот как это может выглядеть:
public partial class ViewModel : INotifyPropertyChanged
{
DataSet1 ds;
DataRowView selectedMaster;
public IEnumerable<DataSet1.MasterTableRow> MasterTable
{
get { return ds.MasterTable; }
}
public DataRowView SelectedMaster
{
get { return selectedMaster; }
set
{
if (selectedMaster != value)
{
selectedMaster = value;
OnPropertyChanged("MasterDetails");
OnPropertyChanged("SelectedMaster");
}
}
}
public IEnumerable<DataSet1.DetailsTableRow> MasterDetails
{
get
{
var masterRow = (DataSet1.MasterTableRow)SelectedMaster.Row;
return masterRow.GetDetailsTableRows();
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
#endregion
}
В XAML привязки могут выглядеть следующим образом:
<ListBox ItemsSource="{Binding MasterTable}"
SelectedItem="{Binding SelectedMaster}"
ItemTemplate="{StaticResource MasterTemplate}"/>
<ListBox ItemsSource="{Binding MasterDetails}"
ItemTemplate="{StaticResource DetailsTemplate}"/>