我在C#Xamarin中有一个可观察的集合" Item"为堆栈中的实例提供服务。在课堂上有几个变量,最相关的变量是" Name" (字符串)和" id"。这两个都是" public get private set"。
当用户重新排列堆栈的顺序时(例如,在堆栈中向上或向下移动项目),字符串永远不会改变并保持应有的状态,但除了构造函数之外的ID永远不会改变,不知何故得到重置为0.
foreach(Item it in ItemList.videoList) {
Post += string.Format("&order[]={0}",(it.id == 0) ? it.Name : vid.id.ToString() );
await DisplayAlert("Data", string.Format("{0} - {1}", it.Name, it.id), "OK");
}
(某些项目没有名称 - 而是使用ID)
如果我只添加一项并且不重新排列,我会在显示提示中得到以下结果:
Tomato - 24
如果我确实添加了其他项目或重新排列了堆栈,那就是结果:
Tomato - 0
请注意;物品本身永远不会改变,ID也是如此!没有隐藏的" foreach将所有id设置为0"任何地方。 (还要注意它的私有get-only变量)
如需额外参考,以下是重新排列功能。它们发生在Item类中,列表本身是类中的静态实例:
public static void BindButton(TapGestureRecognizer up, TapGestureRecognizer down, TapGestureRecognizer remove) {
Item item = ItemLastAdded;
up.Tapped += (e, i) => {
MoveUp(item);
};
down.Tapped += (e, i) => {
MoveDown(item);
};
remove.Tapped += (e, i) => {
ItemList.Remove(item);
};
}
private static void MoveUp(Item item) {
int indexOf = ItemList.IndexOf(item);
if (indexOf >= 1)) {
ItemList.Move(indexOf, indexOf - 1);
}
}
private static void MoveDown(Item item) {
int indexOf = videoList.IndexOf(item);
if (indexOf < videoList.Count - 1)) {
ItemList.Move(indexOf, indexOf + 1);
}
}