Ich habe seit ein paar Tagen nach einer Antwort auf meine Frage gesucht, bin aber nicht in der Lage, eine Lösung zu finden.WPF Master-Details Ansicht mit Listbox und Combobox mit Binding
Das Problem besteht darin, dass die Combobox das Testobjekt in der Benutzerklasse mit den zuvor ausgewählten Benutzern aktualisiert.
d. H., Sie wählen user2 und user2 hat test2, dann wählen Sie user5 mit test5 aus. Wenn Sie nun erneut user2 auswählen, wird angezeigt, dass test5 vorhanden ist.
Hier ist ein Code. Ich habe zwei Klassen Benutzer und Tests. Und zwei ObservableCollections für jeden von denen. Dies ist, wie ich habe sie Setup bekam:
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);
}
}
}
Und die XAML ist:
<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>
Nun, wenn ich die Bindung an die SelectedItem „{Binding Path = Usertest ändern, Modus = OneWay} "dann funktioniert es, aber ich kann es nicht manuell ändern.
Hier ist ein Kicker gedacht ... Wenn ich .Net 4.0 (VS2010) Ziel dann funktioniert es gut ...
Kann jemand mir bitte helfen, eine Lösung für dieses Problem zu finden?
Hallo Andy, Ich habe implementiert INotifyPropertyChanged, wie Sie vorgeschlagen, aber leider bin ich immer noch das gleiche Problem bekommen. Ich habe eine Lösungsdatei auf http://cid-eddcda42d46afe81.skydrive.live.com/self.aspx/Public%20Dev/ComboboxTest.zip geschrieben Beachten Sie die Benutzernummer und die Tests Nummer sollte gleich sein. Klicken Sie nach dem Zufallsprinzip auf ein paar Benutzer und überprüfen Sie dann diejenigen, auf die Sie geklickt haben, wenn der Benutzer und der Test noch nicht ausgerichtet sind. –
Ich konnte Ihre ZIP-Datei nicht öffnen. Ich habe eine Fehlermeldung erhalten, dass sie ungültig ist. Wie auch immer, macht das Objekt, das dein DataContext ist und die Eigenschaft userTest hat, auch INotifyPropertyChanged? – Andy
Hallo Andy, Ja, es funktioniert ... Ich habe es als: public class User: INotifyPropertyChanged { private string name; öffentliche Zeichenkette Name ... ... privater Test userTest; öffentlicher Test UserTest { erhalten { zurück BenutzerTest; } setzen { userTest = Wert; OnPropertyChanged ("Benutzertest"); } } –