WPF:多个视图,一个DataContext

时间:2010-05-07 16:46:49

标签: wpf datacontext itemscontrol

我正在开发一个WPF应用程序,它必须处理多个屏幕(此时有两个)。

可以在多个屏幕上打开一个视图,并且必须在所有屏幕上一致地反映用户操作。

为实现此目的,对于给定类型的视图,将实例化单个DataContext。然后,当在屏幕上显示视图时,将附加唯一的DataContext。所以,一个DataContext,几个视图(相同类型的视图/ xaml)。

到目前为止一切顺利。在大多数情况下,它运作良好。

我确实遇到了依赖ItemsControl的特定视图的问题。这些ItemsControl用于显示在ViewModel / DataContext(C#代码)中动态构建的UIElements。这些UIElements主要是Path对象。示例:

<ItemsControl ItemsSource="{Binding WindVectors}">
   <ItemsControl.Template>
     <ControlTemplate TargetType="{x:Type ItemsControl}">
       <Canvas IsItemsHost="True" />
     </ControlTemplate>
   </ItemsControl.Template>
 </ItemsControl>

此处WindVectorsObservableCollection<UIElement>

第一次打开视图时,一切都很好。问题是当视图打开另一个屏幕时,所有ItemsControl都将从第一个屏幕中删除,并在第二个屏幕上显示一个。此视图上的其他WPF组件(例如TextBlock)会正常响应并显示在两个屏幕上。

非常感谢任何帮助。

感谢。

和Fabrice

1 个答案:

答案 0 :(得分:0)

这是预期的行为(即winforms以来的那种方式) - 这是因为ObservableCollection是一个引用。这种情况不会发生在值类型上,只会引用类型。

简短的回答是“不要那样做”。您可以尝试在xaml中定义集合视图,或者编写自定义数据提供程序并将其绑定到其中一个。