我在同步WPF中的兩個ListBox時遇到了一些問題。我無法同步WPF中的主/明細列表框
我用兩個DataTable創建並填充了一個DataSet。一個DataTable用於People,另一個DataTable用於他們的照片。
我可以讓兩個ListBoxes彼此獨立運作,但我希望它們可以作爲Master to Detail來使用。
這是我的第一個WPF項目,所以任何建議,非常感謝!
C#代碼:
DataSet ds = new DataSet();
UserManagement.Users users = new UserManagement.Users(_cnFaces);
ds = users.GetUsersForFR();
users = null;
lbPeople.DataContext = ds;
lbPhotos.DataContext = ds;
public DataSet GetUsersForFR()
{
Library.DAL.DataCE helper;
try
{
string sSQLPeople = @"
SELECT
*
FROM
tblUsers
";
string sSQLPhotos = @"
SELECT
*
FROM
tblFacialRecognition
";
helper = new Library.DAL.DataCE(_cnFaces);
DataSet ds = new DataSet();
ds.Tables.Clear();
ds.Tables.Add(helper.GetDataTable(sSQLPeople, CommandType.Text, "People"));
ds.Tables.Add(helper.GetDataTable(sSQLPhotos, CommandType.Text, "Photos"));
DataRelation relation = new DataRelation("People2Photos",
ds.Tables["People"].Columns["fldUsername"],
ds.Tables["Photos"].Columns["fldUsername"]);
ds.Relations.Add(relation);
return ds;
}
finally
{
helper = null;
}
}
的DataTemplates:
<DataTemplate x:Key="PeopleTemplate">
<StackPanel Margin="3">
<DockPanel >
<Image Source="{Binding fldPrimaryPhoto}" />
</DockPanel>
<DockPanel>
<TextBlock Text="{Binding fldUsername}" Foreground="Black" FontWeight="Bold" />
</DockPanel>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="PhotoTemplate">
<StackPanel Margin="3">
<DockPanel >
<Image Source="{Binding fldPhoto}" />
</DockPanel>
<DockPanel>
<TextBlock Text="{Binding fldUsername}" Foreground="Black" FontWeight="Bold" />
</DockPanel>
</StackPanel>
</DataTemplate>
列表框:
<ListBox Name="lbPeople"
ItemsSource="{Binding Path=Tables[0]}"
IsSynchronizedWithCurrentItem="True"
ItemTemplate="{StaticResource PeopleTemplate}"
SelectionChanged="lbPeople_SelectionChanged" />
<ListBox Name="lbPhotos"
Margin="0,0,326,0"
ItemsSource="{Binding Path=Tables[1]}"
IsSynchronizedWithCurrentItem="True"
ItemTemplate="{StaticResource PhotoTemplate}" />
我不知道如何做到這一點的DataTables。對象需要將細節綁定到元素lbPeople SelectedItem。照片將成爲人物的List屬性。值得去List/ObservableCollections而不是DataTables。 .NET集合現在擁有如此強大的力量。在數組的日子裏,你不得不重新添加一個項目,有更多的時間使用DataTables。哦,並用DataReader填充你的類,並擺脫DataTables。 – Paparazzi 2012-02-15 01:32:13