C # как связать массив с массивом кнопок - PullRequest
0 голосов
/ 20 октября 2018

Я практикую структуру viewModel и привязки данных.Я создаю кнопки и добавляю их в массив, чтобы легко управлять ими с помощью цикла for.Тем не менее, кажется, что я делаю некоторую ошибку, когда я их связываю.

Вот мой код:

public class MyForm : Form
{
    private ViewModel viewModel;
    private Button[] buttons;

    public MyForm (ViewModel viewModel)
    {
        this.viewModel = viewModel;
        InitializeComponent();

        buttons = new Button[]
        {
            button1, button2, button3, ...
        };

        for (int i = 0; i < buttons.Length; ++i)
        {
            buttons[i].DataBindings.Add("Text", viewModel, "ButtonText[" + i + "]");
        }
    }

    (...)
}

и В моей ViewModel

public class ViewModel
{
    private string[] buttonText;

    public string[] ButtonText
    {
        get
        {
            return buttonText;
        }
    }

    public ViewModel ()
    {
        buttonText = new string[]
        {
            "string1", "string2", "string3", ...
        };
    }

    (...)
}

, когда язапустив его, я получаю ArgumentException

System.ArgumentException: «Невозможно привязать свойство или столбец« ButtonText [0] »в источнике данных.Имя параметра: dataMember '

Как мне изменить привязку, чтобы получить правильное поведение программы?Заранее спасибо!

1 Ответ

0 голосов
/ 20 октября 2018

Невозможно выполнить привязку к элементу индекса свойства.
Если вы считаете, что привязка данных основана на отражении, вы увидите, что у модели представления нет открытого свойства с именем «ButtonText [2]».Имя DataMember - просто строка, привязка данных не сможет получить оттуда индекс.

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

Если у вас есть динамические кнопки, вы можете привязать коллекцию имен и действий кнопок к DataGridView только с одним столбцом кнопок.

...