Message的Messagebox问题

时间:2014-02-11 16:31:26

标签: c# telerik windows-phone

我的留言箱出现了奇怪的行为

这是代码:

private async void rate_Tap(object sender, System.Windows.Input.GestureEventArgs e) {
    string id = (string)((Image)sender).Tag;
    ignoreSelectionChanged = true;

    MobileServiceCollection<rating, rating> items;
    IMobileServiceTable<rating> itemTable = App.MobileService.GetTable<rating>();
    items = await itemTable
        .Where(Table => Table.userid == userId)
        .ToCollectionAsync();

    if (id != null) {
        for (int i = 0; i < items.Count; i++) {
            if (items[i].itemid == id) {
                MessageBox.Show("You already giving your rating.");
                i = items.Count;
                return;
            }
            else {
                RadMessageBox.Show(
                    new string[] { "very accurate", "not accurate" },
                    "Acurate?",
                    "Is this information accurate?", closedHandler: (args) => {
                        int buttonIndex = args.ButtonIndex;

                        if (buttonIndex == 0) {
                            clearListBox();
                            ratingPlus(id);
                            saveRating(id);
                            mvm.LoadDetailData();
                        }

                        if (buttonIndex == 1) {
                            clearListBox();
                            ratingMinus(id);
                            saveRating(id);
                            mvm.LoadDetailData();
                        }
                    }
                );
            }
        }                  
    }
}

我上面的代码是什么我从已经包含图像的列表框中触发rate_Tap(),每次点击它时,都应该检查我的windows azure服务器并检查是否有{{1} }等于itemid。然后我会显示messagebox说我已经对它进行了评分,如果没有任何id等于itemid那么它将执行radmessagebox。

但它没有这样做:当它检查时id等于itemid时,它会显示消息框,之后会显示radmessagebox。

我哪里出错了?

1 个答案:

答案 0 :(得分:1)

你的&#34;否则&#34; block包含您在检查所有项目后要执行的代码 - 而不是每个项目。

我想你想要:

if (items.Any(item => item.itemid == id))
{
    MessageBox.Show("You already giving your rating.");
    return;
}
RadMessageBox.Show(...);
// etc

理想情况下,不要提取所有以前的评分 - 更改您的查询,使其包含您尝试评分的商品的ID。毕竟,你想知道你是否已经对它进行了评分 - 其余的信息毫无意义,那么为什么要把它全部拿走呢?