Xamarin привязка для динамически создаваемых кнопок из списка - PullRequest
0 голосов
/ 21 сентября 2018

В ViewModel я получаю данные из банка данных и записываю некоторые данные в список строк.После того, как это закончено, я создаю кнопки в коде позади.
Теперь я хочу связать каждую из этих кнопок, чтобы я мог делать что-то в ViewModel при нажатии кнопок.
С помощью следующего кода это должно быть понятнеечто я хочу сделать и как я пытался добраться до цели.

В ViewModel у меня есть метод LoadData ():

public List<string> Items { get; set; }

private async Task<bool> LoadData()
{
    Items = new List<string>();
    var data = await getData.Load();

    foreach(var item in data)
    {
        Items.Add(item);
    }

    ItemsLoaded?.Invoke(this);
}

После того, как это закончено, я вызываю метод в коде, который создаст кнопки с этими элементами:

viewModel.ItemsLoaded += AddItemsToUi;

private void AddItemsToUi(MainPageViewModel vm)
{
    foreach (var item in vm.Items)
    {
        var button = new Button
        {
            Text = item,
            TextColor = Color.White
        }
    }
}

Код сильно укорочен и анонимизирован, но я надеюсь, что ясно, что я хочу сделать.

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

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

1 Ответ

0 голосов
/ 25 сентября 2018

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

 Button button;
    private void AddItemsToUi(MainPageViewModel vm)
    {
        foreach (var item in vm.Items)
        {
            button = new Button
            {
                Text = item,
                TextColor = Color.White
            };                
            button.Clicked += Button_Clicked;
        }
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        var button = (sender as Button);
        button.BackgroundColor = Color.Red;
    }
    protected override void OnDisappearing()
    {
        button.Clicked -= Button_Clicked;
        base.OnDisappearing();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...