Привязка набора данных к списку... Табличка данных должна отображаться из нескольких столбцов
Я пытался выяснить это в течение довольно долгого времени. Я хочу, чтобы Databind связывал со списком Dataset.Simple, насколько это возможно. Но моя проблема в том, что я хочу, чтобы моя таблица данных отображала столбцы из двух таблиц в наборе данных. перепробовал много попыток.. но все, что я нашел, просто дает набор данных как datacontext и одну таблицу как itemsource. Но мое условие - я хочу, чтобы в моей таблице данных было больше одной таблицы..
Например:
<DataTemplate x:Key="EmployeeDataTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Margin="5" BorderBrush="Black" BorderThickness="1">
<Image Source="{Binding Path=Mast/Image}" Stretch="Fill" Width="50" Height="50" />
</Border>
<StackPanel Grid.Column="1" Margin="5">
<StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold" >
<TextBlock Text="{Binding Path=Mast/Firstname}" />
<TextBlock Text="{Binding Path=Mast/Lastname}" Padding="3,0,0,0"/>
</StackPanel>
<TextBlock Text="{Binding Path=Details/Age}" />
<TextBlock Text="{Binding Path=Details/Role}" />
</StackPanel>
</Grid>
</DataTemplate>
Любой способ сделать это..? Я сбит с толку...!
Я попытался задать набор данных как текстовый текст, а источник данных как {привязку}, но отображается только одна строка...
1 ответ
Вы должны создать класс модели представления, который предоставляет три свойства:
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}"/>