У меня есть сценарий, в котором я действительно не знаю, как привязывать данные к элементам управления, размещенным в UserControl, к нескольким datacontexts.WPF привязывает несколько элементов управления к различным datacontexts
Данные я хочу, чтобы связать происходит от 2-х классов
UserInfo, UserExtendedInfo
DataContext из UserControl установлен в UserInfo, поэтому я могу связать большинство элементов управления легко выполнив следующие действия
<Label Name="LblEmail" Text="{Binding Email}" />
Однако я дон Не знаю, как легко связывать свойства из класса UserExtendedInfo. Моя первоначальная мысль заключалась в том, чтобы установить datacontext каждого элемента управления, который хочет использовать данные из UserExtendedInfo, чтобы я мог сделать то же самое. Но это кажется громоздким, так как мне придется вручную назначать каждый из них. Данные для UserExtendedInfo должны извлекаться из базы данных каждый раз, когда UserControl становится видимым, чтобы он не выходил из синхронизации.
XAML:
<Label Name="LblTest" Text="{Binding Locale}" />
Код За:
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
Хорошо, что имеет большое значение. Так много нового в WPF :) – Alex
Вместо создания новой модели, единственной целью которой является поддержка этого конкретного представления, вы должны просто добавить UserInfo и UserExtendedInfo как общедоступные свойства ViewModel, которые вы можете привязать к представлению. (См. Rich [ответ] [http://stackoverflow.com/questions/679933/wpf-binding-multiple-controls-to-different-datacontexts/680052#680052)). – totorocat