Циркулярные ссылки на ресурсы, вызывающие проблемы? - PullRequest
2 голосов
/ 21 июня 2009

У меня есть приложение WPF, которое состоит из Pages в NavigationWindow . В App.Xaml я создаю все свои страницы, чтобы я мог ссылаться на них при использовании команд навигации. Это выглядит примерно так:

<Application ...>
 <Application.Resources>
  <FirstPage x:Key="first"/>
  <SecondPage x:Key="second"/>
 </Application.Resources>
</Application>

«Циркулярная» ссылка (не может понять, как еще это назвать) происходит, когда FirstPage ссылается на «second» или наоборот. Давайте просто скажем FirstPage ссылки " second " в этом примере.

<FirstPage ...>
  ...
  <Button
    CommandParameter="{StaticResource second}"
  </Button>
</FirstPage>

( Прежде чем вы начнете отвечать, я вернусь к порядку, в котором FirstPage и SecondPage добавляются к ресурсам приложения мгновенно! )

Эта ситуация приводит к некоторым странным, бесполезным ошибкам. Во-первых, в App.xaml я получаю ошибку

Не удалось создать экземпляр типа FirstPage

Итак, я перехожу на FirstPage и пытаюсь загрузить его в конструкторе. В xaml выделена строка, где я ссылаюсь на « second », и отображается это чрезвычайно полезное сообщение об ошибке:

Приложение XAML не удалось загрузить. Исправить ошибки в приложении XAML прежде чем пытаться загрузить другой XAML файлы

Что было первым: курица или яйцо? App.xaml не может загрузиться, потому что он не может создать FirstPage, и я не могу исправить FirstPage, потому что это на самом деле app.xaml, это проблема.

Вещи, которые я пытался исправить это:
1) Я попытался изменить порядок элементов, добавленных в Application.Resources . Я подумал, что если FirstPage нужно получить SecondPage, то SecondPage должен быть добавлен и доступен до появления FirstPage. Это не работает.
2) Я попытался использовать DynamicResource вместо StaticResource . Без помощи.
3) Я попытался добавить экземпляры страницы в коде. Это работает, но не удовлетворяет.

Обратите внимание, приложение компилируется и работает нормально; вопрос в том, почему это ломается во время разработки.


Что я могу сделать, чтобы это исправить? Мне нужно получить доступ к своим страницам повсеместно, чтобы использовать их в качестве параметров навигации, поэтому я помещаю их в ресурсы приложения. Есть ли альтернативный способ сделать это? Мне нужен только один экземпляр каждой страницы в моем приложении, если я могу помочь.

1 Ответ

1 голос
/ 22 июня 2009

Вы можете использовать имя ресурса в качестве параметра, а не сам ресурс. Тогда ваша команда может выполнить поиск фактического ресурса для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...