我幾天來一直在四處尋找我的問題的答案,但無法找到解決方案。帶有ListBox和Combobox的WPF Master-Details視圖綁定
問題是,組合框更新了用戶類中的測試對象與先前選擇的用戶。
即您選擇user2和user2有test2,然後選擇具有test5的user5。現在如果你再次選擇user2,它會顯示它有test5。
這是一些代碼。我有兩個類用戶和測試。還有兩個ObservableCollections。這就是我已經得到了他們設置:
public class User
{
public string Name { get; set; }
public int test { get; set; }
public test userTest { get; set; }
}
public class test
{
public int ID { get; set; }
public String Name { get; set; }
}
public class ListOfTests:ObservableCollection<test>
{
public ListOfTests()
{
for (int i = 0; i < 4; i++)
{
test newTest = new test();
newTest.ID = i;
newTest.Name = "Test " + i;
Add(newTest);
}
}
}
public class ListOfUsers: ObservableCollection<User>
{
public ListOfUsers()
{
ListOfTests testlist = new ListOfTests();
for (int i = 0; i < 10; i++)
{
User newUser = new User();
newUser.Name = "User " + i;
newUser.ID = i;
newUser.userTest = testlist[i];
Add(newUser);
}
}
}
而XAML是:
<Window x:Class="ComboboxTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ComboboxTest"
Title="Window1" Height="300" Width="300">
<StackPanel x:Name="SP1">
<StackPanel.Resources>
<local:ListOfTests x:Key="ListOfTests" />
</StackPanel.Resources>
<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" IsSynchronizedWithCurrentItem="True"/>
<TextBox Text="{Binding Path=Name}" Foreground="Black" />
<TextBox Text="{Binding Path=userTest}" />
<ComboBox SelectedItem="{Binding Path=userTest}"
SelectedValue="{Binding Path=userTest.ID}"
ItemsSource="{Binding Source={StaticResource ListOfTests}}"
DisplayMemberPath="Name"
SelectedValuePath="ID"
Foreground="Black" />
</StackPanel>
現在,如果我改變的的SelectedItem綁定到「{綁定路徑= userTest,模式= OneWay}「,那麼它的工作原理,但我不能手動改變它。
這裏是一個踢球者以爲,如果我面向.NET 4.0(VS2010),那麼它工作正常...
誰能幫我找到一個解決的辦法?
安迪嗨, 我已經實現INotifyPropertyChanged的如你所說的,但不幸的是,我仍然得到了同樣的問題。 我已在http://cid-eddcda42d46afe81.skydrive.live.com/self.aspx/Public%20Dev/ComboboxTest.zip發佈解決方案文件 請注意用戶數量和測試數量應該相同。隨機點擊幾個用戶,然後檢查您點擊的用戶和測試是否仍然排隊。 – 2009-08-03 20:07:48