我有一个 ViewModel,我想从中更新我的 View 。 ViewModel 具有利用 PropertyChangedEventHandler
动态更新 View 上的元素的属性。
对于我 View 中的大多数元素,我使用 BindingContext,即
BindingContext = carouselViewModel;
但是,在 View 初始化期间,我从后面的代码中添加了几个图像元素:
foreach (Carousel e in partner.getPartnerItem())
{
dots.Children.Add(new Image
{
Source = "dot_unselected.png",
});
}
这里的getPartnerItem
是一个对象列表,用于确定 View 应该保存多少Image
。在这种情况下,“dots”是一个 StackLayout
。
从名为 carouselViewModel
的 ViewModel 中,我动态选择 Image
元素,即:
public bool isSelected
{
get
{
return _isSelected;
}
set
{
_isSelected = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(isSelected)));
}
}
_isSelected
是从另一个模型更改而来的,其中计时器触发事件。
当然,由于我的图像是动态添加的,我无法像这样进行标准绑定(bind):
<Image Source="{Binding whatEverProperty}"/>
因此,我尝试在后面的代码中执行以下操作,如下所示:
public FrontPage()
{
Image currentSlider;
for (int i = 0; i <= partner.getPartnerItem().Count() ; i++)
{
if (carouselViewModel.numberInList == i && carouselViewModel.isSelected)
{
currentSlider = (Image)dots.Children.ElementAt(i);
currentSlider.Source = "dot_selected.png";
}
else
{
currentSlider = (Image)dots.Children.ElementAt(i);
currentSlider.Source = "dot_unselected.png";
}
}
}
上面,我尝试通过 getPartnerItem()
关联列表中对象对应的 StackLayout
中名为“dots”的 Image
>。此外,我还获取了 carouselViewModel.numberInList
,它基本上用于告诉在列表中选择了哪个对象。
不幸的是,没有任何反应,我的图像仍然以“dot_unselected.png”作为源。
总而言之,当我像上面的示例中那样动态添加元素时,有没有一种方法可以将图像绑定(bind)到具有唯一标识符的 ViewModel?
最佳答案
您可以在代码中创建绑定(bind)
myImage.SetBinding(Image.SourceProperty, "BindingPath");
关于c# - 将绑定(bind)添加到在代码隐藏中创建的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57536373/