在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。 我以为可以通过某种绑定来做到这一点,但是我什至不知道真正从哪里开始。我需要可以以某种方式识别的绑定。这可能吗?
由于可能存在重复而进行编辑:重复的问题只需要一个普通的绑定即可。我的问题是,我需要在循环中添加绑定,但是仍然想以某种方式标识每个绑定的项目。我不知道这是正确的方法,还是我需要其他不同的东西,因为那是不可能的。
答案 0 :(得分:2)
在下面的代码中尝试单击事件的句柄,并在页面消失时获得释放。
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();
}