【发布时间】:2011-06-27 20:19:09
【问题描述】:
我有以下问题:我正在构建一个聊天 WPF 应用程序,我希望用户在该应用程序上通过不同帐户连接到 GTalk。我制作了一个允许处理通信的 ViewModel,但我不知道哪种是处理 DataContext 的最佳方式。我认为每个连接实例都需要不同的 DataContext,但我不知道这是否正确,也不知道如何在 View 中定义多个 DataContext。
【问题讨论】:
标签: c# wpf datacontext
我有以下问题:我正在构建一个聊天 WPF 应用程序,我希望用户在该应用程序上通过不同帐户连接到 GTalk。我制作了一个允许处理通信的 ViewModel,但我不知道哪种是处理 DataContext 的最佳方式。我认为每个连接实例都需要不同的 DataContext,但我不知道这是否正确,也不知道如何在 View 中定义多个 DataContext。
【问题讨论】:
标签: c# wpf datacontext
DataContext 为视图中的元素提供默认绑定源。它在可视化树中从父级继承到子级。您可以通过将任何元素绑定到其父 DataContext 的某些属性来更改任何元素的 DataContext。这是创建绑定到子视图模型的“孤岛”的常用方法。
例如,如果您的用户视图模型具有 Address 属性,则可以在 AddressUserControl 中呈现它,如下所示:
<StackPanel>
... elements bound to properties of User ...
<AddressUserControl DataContext="{Binding Address}"/>
</StackPanel>
【讨论】:
如果您有可变数量的帐户,则可以使用 ItemsControl。
这背后的粗略想法:您可以将 ItemsControl 绑定到主 ViewModel 中的“子视图模型”列表,并为每个视图定义一个 DataTemplate(= 一个视图)。每个 DataTemplate 的 DataContext 会自动分配给 ViewModel 列表中的相应项。
【讨论】: