Как динамически вызвать текстовое поле из строки C # WPF? - PullRequest
0 голосов
/ 22 февраля 2011

Итак, у меня есть 70 «узлов», которые являются текстовыми полями в WPF, и я пытаюсь изменить значение в текстовом поле с помощью вызова функции.

У меня есть функция с именем:

private void changeNode(int row, int column, int cost)  
{    
       int nodeNumber= row * 10 + column;     
       call node"nodeNumber".Text = Convert.String(cost); 
       //example node0.Text = Convert.String(cost); 
}

Я определяю, какой узел я хочу изменить, затем вызываю nodeX.Text, чтобы изменить его, однако я хочу, чтобы X был переменной, которую я могу вместоМне пришлось создать 70 случаев, когда я вызываю соответствующее текстовое поле.

Я видел несколько способов сделать это с помощью отражения, однако, казалось, что это работает, только если функция не имеет параметров и также находится внутри функции, а не текстового поляв XAML.

Дайте мне знать, если есть простой способ преобразования, скажем, строки "node37" в вызов node37.Text = cost или что-то в этом роде.

Ответы [ 4 ]

1 голос
/ 22 февраля 2011

Похоже, что ваш подход не так. Почему у вас есть набор строк, которые представляют имена текстовых полей? Вместо этого вы должны иметь в памяти ссылки на TextBox объекты. Если у вас их больше одного, и вы не знаете, сколько их будет, используйте вместо этого array из TextBox объектов. Вы можете внести в массив индекс с номером, представляющим текстовое поле, с которым вы хотите взаимодействовать.

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

0 голосов
/ 22 февраля 2011

Всегда лучше использовать List, когда вы имеете дело с данными. Создайте ObservableCollection с объектами DataObject, которые вы хотите загрузить, и теперь работайте с объектом Data, а не с фактическими элементами управления.

В WPF, если вы следуете правилам, вы не должны указывать на реальный объект. Проверьте образец заявки здесь: http://www.abhisheksur.com/2010/08/woring-with-icollectionviewsource-in.html

Я думаю, что вы получите подход.

0 голосов
/ 22 февраля 2011

Все ваши текстовые поля являются дочерними элементами одного и того же холста или другого элемента управления? Переберите детей и добавьте элементы управления в словарь. Разобрать имя, чтобы получить номер и использовать его в качестве ключа.

0 голосов
/ 22 февраля 2011

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

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