C# CollectionView更新图像按钮滚动重复UI问题
我有一个C# CollectionView更新图像按钮滚动重复UI问题,c#,xamarin,xamarin.forms,xamarin.forms.collectionview,C#,Xamarin,Xamarin.forms,Xamarin.forms.collectionview,我有一个CollectionView包含一个ImageButton。按下图像时,我将a.png替换为b.png 这很好,但当我向下滚动列表时,每10个项目都会显示b.png 如果我没有设置按钮.source,而是在保存到DB后再次调用下面的行,这解决了我的问题,但我从列表的顶部开始,而不是从当前位置开始: ItemsListView.ItemsSource = items; 如何设置按钮.source而不在每10项中创建此错误 <CollectionView x:Name=&qu
CollectionView
包含一个ImageButton
。按下图像时,我将a.png替换为b.png
这很好,但当我向下滚动列表时,每10个项目都会显示b.png
如果我没有设置按钮.source
,而是在保存到DB后再次调用下面的行,这解决了我的问题,但我从列表的顶部开始,而不是从当前位置开始:
ItemsListView.ItemsSource = items;
如何设置按钮.source
而不在每10项中创建此错误
<CollectionView x:Name="Items">
<CollectionView.ItemTemplate>
<DataTemplate>
<ImageButton CommandParameter="{Binding Id}" Source="a.png" Clicked="OnInventoryClicked" />
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
您可以使用souce属性进行更改 Xaml:
代码隐藏:
public partial class MainPage : ContentPage
{
public ObservableCollection<Info> infos { get; set; }
public MainPage()
{
InitializeComponent();
infos = new ObservableCollection<Info>()
{
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
};
this.BindingContext = this;
}
private void ImageButton_Clicked(object sender, EventArgs e)
{
var button = (sender as ImageButton);
button.Source = "dog.jpg";
}
}
public class Info
{
public string image { get; set; }
}
public分部类主页面:ContentPage
{
公共可观测集合信息{get;set;}
公共主页()
{
初始化组件();
infos=新的ObservableCollection()
{
新信息{image=“pink.jpg”},
新信息{image=“pink.jpg”},
新信息{image=“pink.jpg”},
新信息{image=“pink.jpg”},
新信息{image=“pink.jpg”},
};
this.BindingContext=this;
}
已单击私有无效图像按钮(对象发送者,事件参数e)
{
var按钮=(发送方为ImageButton);
button.Source=“dog.jpg”;
}
}
公共类信息
{
公共字符串图像{get;set;}
}
附带问题:CommandParameter是否应该仅与Command一起使用(不查看Command)?与其直接修改图像源,不如尝试将其绑定到模型属性。因此,您不需要每次都加载该项。您已经有一个绑定到当前单元格的副本,只需使用该副本并为自己保存一个db操作谢谢,这是我的第一个Xamarin应用程序,因此我需要阅读更多教程,但它现在正在图像源上添加绑定。如何进行重构以删除CommandParameter并删除“get DB call”,同时仍然能够获得要传递给“save DB call”的完整对象?CommandParameter=“{Binding.}”
将传递整个对象,而不仅仅是ID
<CollectionView x:Name="Items" ItemsSource="{Binding infos}">
<CollectionView.ItemTemplate>
<DataTemplate>
<!--<ImageButton
Clicked="OnInventoryClicked"
CommandParameter="{Binding Id}"
Source="a.png" />-->
<ImageButton Clicked="ImageButton_Clicked" Source="{Binding image}" />
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
public partial class MainPage : ContentPage
{
public ObservableCollection<Info> infos { get; set; }
public MainPage()
{
InitializeComponent();
infos = new ObservableCollection<Info>()
{
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
new Info{image = "pink.jpg" },
};
this.BindingContext = this;
}
private void ImageButton_Clicked(object sender, EventArgs e)
{
var button = (sender as ImageButton);
button.Source = "dog.jpg";
}
}
public class Info
{
public string image { get; set; }
}