Я бывший разработчик PHP, сейчас работаю с приложениями WPF / C #, и у меня возникают проблемы с пониманием лучшего способа доступа к глобальным переменным и того, как UserControls обращается к главному окну и т. Д.
В конструкторе моего класса Window1 я загружаю UserControls во внутренний словарь, а затем динамически загружаю их в DockPanel во время выполнения, что прекрасно работает и сохраняет внутреннее состояние каждого из них.
public Window1()
{
InitializeComponent();
List<string> userControlKeys = new List<string>();
userControlKeys.Add("Welcome");
userControlKeys.Add("News");
Type type = this.GetType();
Assembly assembly = type.Assembly;
foreach (string userControlKey in userControlKeys)
{
string userControlFullName = String.Format("{0}.Pages.{1}", type.Namespace, userControlKey);
UserControl userControl = (UserControl)assembly.CreateInstance(userControlFullName);
_userControls.Add(userControlKey, userControl);
}
//set the default page
btnWelcome.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
Вопрос : из UserControl как я могу получить доступ к своему словарю в Window1?
- Я могу получить доступ к статическому классу Window1, но не к его экземпляру, поэтому создание Getter для него больше не дает мне.
- в C # есть глобальные атрибуты, но я могу представить, что есть лучший, более удобный способ ООП
- просто мне кажется, что я смотрю на это с точки зрения переменных веб-сайта / сеанса и, таким образом, упускаю ключевую концепцию разработки рабочего стола, где "состояние везде"
Надеюсь, кто-то может пролить свет на это.