Ich habe ein Szenario, in dem ich nicht wirklich weiß, wie Daten an Steuerelemente, die in einem UserControl gehostet werden, an mehrere Datenkontexte gebunden werden.WPF, das mehrere Steuerelemente an verschiedene Datenkontexte bindet
Die Daten i stammt aus zwei Klassen binden möchten
UserInfo, UserExtendedInfo
Die Datacontext der Usercontrol Userinfo eingestellt ist, so kann ich die meisten Kontrollen leicht tun die folgenden
<Label Name="LblEmail" Text="{Binding Email}" />
aber ich don binden Ich weiß nicht, wie man Eigenschaften aus der UserExtendedInfo-Klasse einfach bindet. Mein erster Gedanke war, den Datenkontext jedes Steuerelements festzulegen, das die Daten von UserExtendedInfo verwenden möchte, damit ich dasselbe tun konnte. Aber das scheint umständlich, da ich jedes einzelne manuell zuordnen müsste. Die Daten für UserExtendedInfo müssen jedes Mal aus der Datenbank abgerufen werden, wenn das Benutzersteuerelement sichtbar wird, damit es nicht nicht mehr synchron ist.
XAML:
<Label Name="LblTest" Text="{Binding Locale}" />
-Code Behind:
Private Sub UserManager_IsVisibleChanged(ByVal sender As System.Object, ByVal e As System.Windows.DependencyPropertyChangedEventArgs)
If DirectCast(e.NewValue, Boolean) Then
Dim user As UserInfo = DirectCast(DataContext, UserInfo)
If user IsNot Nothing Then
Dim usrExt As UserExtenedInfo = UserController.GetUserExtended(user.userID)
LblTest.DataContext = usrExt
Else
Throw New ArgumentException("UserId doesn't exist or is less than 1")
End If
End If
End Sub
Ok, das macht viel Sinn. So viel neues Zeug in WPF zu lernen :) – Alex
Anstatt ein neues Modell zu erstellen, dessen einziger Zweck es ist, diese bestimmte Ansicht zu unterstützen, sollten Sie einfach UserInfo und UserExtendedInfo als öffentliche Eigenschaften eines ViewModel hinzufügen, die Sie an die Ansicht binden können. (Siehe Rich's [Antwort] (http://stackoverflow.com/questions/679933/wpf-binding-multiple-controls-to-different-datacontexts/680052#680052)). – totorocat