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# - 如何使用异步命令 MVVM WPF

Silverlight MVVM MEF ViewInjection

c# - 如何访问由 Designer (XAML) 创建的 xamarin(C#、Visual Studio 2015)中的控件

c# - 有什么充分的理由不依赖业务逻辑中的数据库 key 完整性吗?

c# - 运算符 '^' 不能应用于类型 'double' 和 'double' 的操作数

c# - 如何在 Xamarin 中从我的 iOS 应用程序打开 Facebook/Twitter 应用程序?

Xamarin DatePicker如何处理完成按钮点击事件

c# - Specflow 未在 Visual Studio 2019 中执行测试

android - 从 Android 客户端订阅 MvxMessage

c# - 为什么列表框模板中的绑定(bind)命令无法运行?