2015-04-01 2 views
1

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

Например, в XAML Пользователь управления устанавливается

<local:MyControl x:Name="ControlName" />

которые могут быть доступны на том же коде-за простым вызовом ControlName.UseMethod(); так же, как любые экземпляры классов, которые я хотел бы сделать.

Теперь, хотя я мог бы объявить экземпляр нормальных классов в коде как открытый, тогда свободно его использовать, у меня нет возможности сделать это здесь, поскольку он объявлен в XAML, который я могу " t публиковать напрямую.

Мне нужно иметь доступ к содержимому пользовательского элемента управления в других разделах программы и не использовать методы, которые мне нужны, как статические.

Мой опыт в программировании очень мало, изучая книги и небольшие проекты, которые могут объяснить любые странности в вопросе. Надеюсь, все в порядке.

Благодаря

ответ

2

Вы абсолютно не просто сделать этот контроль общественности. Элементы управления в .NET являются частными переменными-членами из их Form, Page, Window и т. Д. Они сгенерированы компилятором в соответствующий «скрытый» файл cs и в то же время становятся закрытыми. Вы можете выставить их, хотя, со свойством, которое возвращает их:

public MyControl MyControlProperty { get { return myControlName; } } 

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

Кроме того, поскольку это WPF, вы даже не должны делать , что, вместо этого вы должны использовать модели просмотра, которые могут ссылаться на методы на других моделях просмотра (часто с помощью модели), чтобы вызвать связанные с ними взгляды и Обновить.

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

+0

Это, если вы можете сказать мне, что я могу сделать Google, чтобы сделать это лучше, я был бы благодарен. Просто все, что может получить доступ к элементам управления, которые находятся на экземпляре пользовательского элемента управления, чтобы я мог обновлять их во время выполнения. По крайней мере, это так хорошо, как я могу это объяснить. – Gilgamesh

+0

@Gilgamesh Вы правы, что 'UserControl' - это класс, как любой другой, но опять же, так же как и' TextBox'. Основная концепция здесь заключается в том, что элементы управления формы очень * намеренно * закрыты. Нет никаких оснований напрямую подвергать их другим объектам, так как это затрудняет связь * way *. Если вы решите это сделать, просто используйте метод свойств, который я вставляю в свой ответ (опять же, это означает, что ваш дизайн в реальной ситуации). Что касается этого лучше, посмотрите на шаблон MVVM. Вот стартовая точка: https://msdn.microsoft.com/en-us/library/gg405484%28v=pandp.40%29.aspx – BradleyDotNET

+0

А я понимаю, что вы имеете в виду. Я не буду проходить через этот маршрут, потому что я не хочу подбирать неприятные практики. Кроме того, я избегал попытки использовать MVVM-материал из-за попытки сократить кривую обучения с помощью WPF, но я вижу, что делать это было не так уж хорошо. Спасибо за помощь. – Gilgamesh

Смежные вопросы