c# - Xamarin 绑定(bind)从列表中动态创建的按钮

标签 c# xamarin mvvm data-binding xamarin.forms

在 ViewModel 中,我从数据库中获取数据并将一些数据写入字符串列表。完成后,我在后面的代码中创建按钮。
现在我想绑定(bind)这些按钮中的每一个,以便在单击按钮时可以在 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。
我想,我可以通过某种绑定(bind)来做到这一点,但我什至不知道从哪里开始。我需要一个我可以以某种方式识别的绑定(bind)。这可能吗?

因可能重复而编辑:重复的问题只需要一个正常的绑定(bind)。我的问题是,我需要在循环中添加绑定(bind),但仍想以某种方式识别每个绑定(bind)项。我不知道这是正确的方法还是我需要一些不同的东西,因为那是不可能的。

最佳答案

在您的 Clicked Event 获取句柄中尝试以下代码,并在页面消失时获得 Released

 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();
    }

关于c# - Xamarin 绑定(bind)从列表中动态创建的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52445313/

相关文章:

c# - 组合框绑定(bind) MVVM WPF SelectedValue

c# - MVVM - 模型教程?

c# - 查看类图缺失

c# - 从独立存储加载大量图像时出现 OutOfMemory 异常

c# - 使用 Xamarin.Insights 时异常通常会导致崩溃

Xamarin Android 部署上的 Java、Lang.OutOfMemoryError

c# - xamarin 广播接收器访问 View 模型

wpf - 如何根据命令更改 View + View 模型

c# - 为什么 `Microsoft.JScript` 在代码隐藏中工作,但在 `<% %>` 中不起作用?

c# - Teamcity Nunit 3.0 控制台运行器不工作