在 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/