C#Xamarin:ObservableCollections <item>将变量重置为0?

时间:2017-12-07 13:48:16

标签: c# xamarin observablecollection

我在C#Xamarin中有一个可观察的集合&#34; Item&#34;为堆栈中的实例提供服务。在课堂上有几个变量,最相关的变量是&#34; Name&#34; (字符串)和&#34; id&#34;。这两个都是&#34; public get private set&#34;。

当用户重新排列堆栈的顺序时(例如,在堆栈中向上或向下移动项目),字符串永远不会改变并保持应有的状态,但除了构造函数之外的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也是如此!没有隐藏的&#34; foreach将所有id设置为0&#34;任何地方。 (还要注意它的私有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);
            }
        }

0 个答案:

没有答案