我试图解决这个问题很长一段时间。我想要一个Databind一个带有Dataset.Simple的列表框,因为它可以得到。但我的问题是我希望我的datatemplate在数据集中显示来自两个表的列我已经尝试过很多样本..但是我发现的所有东西都只是将数据集作为datacontext给出了一个表作为itemsource.But我的条件是我想在我的datatemplate中有多个表..
例如:
<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>
任何方式这样做..?我很困惑......!
我尝试将数据集作为datacontext,将Itemsource作为{Binding}但是只显示了一行......
答案 0 :(得分: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}"/>