WPF: несколько представлений, один DataContext - PullRequest
1 голос
/ 07 мая 2010

Я работаю над приложением WPF, которое должно обрабатывать несколько экранов (в настоящее время два).

Один вид можно открыть на нескольких экранах, а действия пользователя должны последовательно отображаться на всех экранах.

Чтобы достичь этого, для данного типа представления создается один экземпляр DataContext.Затем, когда представление отображается на экране, уникальный DataContext присоединяется к нему.Итак, один DataContext, несколько представлений (один и тот же тип представления / xaml).

Пока все хорошо.В большинстве случаев это работает довольно хорошо.

У меня есть проблема с определенным представлением, которое зависит от ItemsControl.Эти ItemsControl используются для отображения элементов UIE, динамически встраиваемых в ViewModel / DataContext (код C #).Эти элементы UIE являются в основном объектами 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

1 Ответ

0 голосов
/ 07 мая 2010

Это ожидаемое поведение (т. Е. То же самое, что и со временем winforms) - это потому, что ObservableCollection является ссылкой. Это не случится с типами значений, только ссылочными типами.

Краткий ответ: «Не делай этого». Вы можете попытаться определить представление коллекции в xaml или написать собственный провайдер данных и связать его с одним из них.

...