私は、UserControlで複数のdatacontextにホストされているコントロールにデータをバインドする方法を実際にはわからないシナリオがあります。複数のコントロールを異なるデータコンテキストにバインドするWPF
私はバインドするデータは、ユーザーコントロールのDataContextのは、私は簡単しかし、私ドン以下
<Label Name="LblEmail" Text="{Binding Email}" />
をやっほとんどのコントロールをバインドすることができたUserInfoに設定されている2クラス
UserInfo, UserExtendedInfo
から来ていますUserExtendedInfoクラスからプロパティを簡単にバインドする方法を知っています。私の最初の考えは、UserExtendedInfoからのデータを使用する各コントロールのdatacontextを設定して、同じことができるようにすることでした。しかし、私は手動で個々に割り当てる必要があるので、これは面倒なようです。 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
この特定のビューをサポートすることだけを目的とする新しいモデルを作成する代わりに、ビューにバインドできるViewModelのパブリックプロパティとしてUserInfoとUserExtendedInfoを追加してください。 (Richの[answer](http://stackoverflow.com/questions/679933/wpf-binding-multiple-controls-to-different-datacontexts/680052#680052)を参照してください)。 – totorocat