2013-11-19 8 views
0

Еще одна тема и сложность вместе с ней возникли при игре с WPF, и она заключается в попытке вызвать функцию из динамически добавленного пользовательского элемента управления, передав ей значение.
Для текущего примера у меня есть пользовательский элемент управления, который имеет свойство «Секрет» и кнопку в нем с именем «PublishSecret», конструктор устанавливает значение Секрет случайному числу. В MainWindow у меня есть еще одна кнопка с именем «AddSecretContainer», которая добавляет в окно дополнительный экземпляр этого пользовательского элемента управления, рядом с ним у меня есть текстовое поле с именем «PublishedSecret». Простой метод в MainWindow также был определен, здесь:Вызов функции из динамически добавленного пользовательского элемента управления

public void PublishSecret(int secret) 
{ 
    this.PublishedSecret = secret; 
} 

Теперь без прохождения этой Тайны я мог бы использовать маршрутизируемую команду с их бурлящим эффектом. Но как я могу позвонить PublishSecret, предоставив ему локальное значение Secret из пользовательского элемента управления при нажатии кнопки PublishSecret?

+0

'динамически добавленный пользовательский контроль' - как вы« добавляете »свои пользовательские элементы управления? вы должны «не» манипулировать пользовательским интерфейсом в прозаическом коде в WPF. Для этого и предназначен XAML. Изучите MVVM до того, как вы напишете одну строку кода в WPF. –

+0

@HighCore позволяет сказать, что вы хотите добавить поддержку плагинов к вашему приложению или создать вкладки для вашего приложения браузера, это также динамически добавленные элементы управления, не так ли? и как бы вы справились с этой ситуацией? Остановите мышление внутри своего окна MVVM на секунду и будьте более творческими. Даже VS теперь написан в WPF, по крайней мере, в некоторых его частях, и он поддерживает плагины. – Jyrkka

+2

Попробуйте запустить событие в пользовательском элементе управления и подписаться на MainWindow на это событие и вызвать 'PublishSecret' в обработчике событий – lena

ответ

0

Если ваш UserControl был добавлен динамически, тогда я предполагаю, что у вас есть доступ к его ссылке в вашей основной модели/коде. Это делает вашу ситуацию приятной и простой. Вы сказали, что есть Button с именем PublishSecret, так что я также предполагаю, что щелчок по нему инициирует некоторые функции.

Мое первое предложение было бы самым простым. Поместите эту функциональность в public метод, который будет вызываться из вашего Click или ICommand обработчика, а затем просто вызвать этот метод из вашей основной модели представления:

childUserControl.PublishSecret(); 

Пожалуйста, дайте мне знать, если я понял вашу проблему.


UPDATE >>>

Ok извините, у меня есть ты сейчас. Вы можете объявить delegate, добавить свойство этого типа вашему ребенку UserControl и приложить обработчик в основной модели представления. Затем вы можете вызвать delegate и в обработчике в модели родительского представления вы можете вызвать свой метод. Дополнительную информацию об этом методе см. В моем ответе на вопрос Passing parameters between viewmodels.

+0

Можете ли вы, пожалуйста, дать мне и ваши другие предложения? :) Также на самом деле вы поняли проблему другой путь round :), у меня есть метод в модели основного представления, который должен выполнить некоторую работу в соответствии с данными (или данными), которые он получил в качестве параметра, и я хочу вызвать его из childUserControl. – Jyrkka

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

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