我正在开发一个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>
此处WindVectors
是ObservableCollection<UIElement>
。
第一次打开视图时,一切都很好。问题是当视图打开另一个屏幕时,所有ItemsControl都将从第一个屏幕中删除,并在第二个屏幕上显示一个。此视图上的其他WPF组件(例如TextBlock)会正常响应并显示在两个屏幕上。
非常感谢任何帮助。
感谢。
和Fabrice
答案 0 :(得分:0)
这是预期的行为(即winforms以来的那种方式) - 这是因为ObservableCollection是一个引用。这种情况不会发生在值类型上,只会引用类型。
简短的回答是“不要那样做”。您可以尝试在xaml中定义集合视图,或者编写自定义数据提供程序并将其绑定到其中一个。