1

我创建了一个动态列表,其中包含一些扩展视图。

这是我的代码:

  foreach (var TransactionType in WorkflowBase.ViewModel_WFTransaction.AvailableTransactionTypes)
        {
            ExpanderView newDoc = new ExpanderView();
            newDoc.FontSize = 32;
            newDoc.Margin = new Thickness() { Bottom = 10, Left = 13, Right = 10, Top = 15 };

            newDoc.Header = TransactionType.ProcessName;

            foreach (var role in TransactionType.ListOfRoles)
            {
                TextBlock roleItem = new TextBlock();
                roleItem.FontSize = 28;
                roleItem.Margin = new Thickness() { Bottom = 4, Left = 4, Right = 4, Top = 4 };
                roleItem.Text = role;
                roleItem.Tag = TransactionType;
                roleItem.Tap += roleItem_Tap;
                newDoc.Items.Add(roleItem);
            }

            NewTransactionsPanel.Children.Add(newDoc);

        }

正如您在扩展器视图中看到的那样,我已将文本块放入以显示我的数据,现在我要做的是当我单击其中一个文本块时,我想获取列表中该项目的索引以及索引列表中的扩展视图。我不知道该怎么做。

这是加载列表后的图片,以提供更好的想法。 扩展视图

例如,如果我单击“po Mobile”标题下的“line manager”,我现在想要该 2 项列表中的 line manager 文本块的索引,并且我想要更大列表中的 po mobile 的索引。

这都是动态数据,所以列表中的项目数量会发生变化。

已解决:根据Kookiz给我的建议,这就是我所做的,1. 我在文本块标签中添加了我需要的所有数据 - 请参阅下面的代码片段,2.然后我将其添加到我的导航中,3.然后查询出来在我的其他页面加载

1.

 roleItem.Tag = 
                    TransactionType.ListOfRoles.IndexOf(role) + "," 
                    + WorkflowBase.ViewModel_WFTransaction.AvailableTransactionTypes.IndexOf(TransactionType) 
                    + "," + TransactionType.FormName 
                    + "," + TransactionType.ProcessID
                    + "," + TransactionType.ActivityID
                    + "," + TransactionType.FormID;

2.

 this.NavigationService.Navigate(new Uri("/UI/Documents/frmGenericNewTransaction.xaml?Formname="
                                        + FormName.ToString() +
                                        "&Role=" + roleindex +
                                        "&Processindex="+ processindex +
                                        "&Processid=" + ProcID +
                                        "&Activityid=" + ActID +
                                        "&Formid=" + FormID +
                                        "&Roleid=" + RoleName, UriKind.Relative));  

3.

NavigationContext.QueryString.TryGetValue("Activityid", out ActivityID);
NavigationContext.QueryString.TryGetValue("Roleid", out RoleName);
NavigationContext.QueryString.TryGetValue("Formid", out FormID);
4

1 回答 1

2

显而易见的方法是浏览扩展器的子控件,直到找到您的文本块。

一种更优雅的方法是将索引存储在文本块的Tag属性中。你已经用它来存储你的TransactionType,所以我猜你知道它是如何工作的。只需使用更复杂的类型来存储索引以及您的事务类型。但是,如果您在现有元素之前添加新元素,您的索引可能会过时,因此这取决于您将如何更新您的项目。

最后但并非最不重要的一点是,您可以设置一个 ItemTemplate 并将您的列表分配给 expanderview 的 ItemsSource 属性,而不是手动将每个项目添加到您的扩展视图中。然后,在这种情况Tap下,您可以从文本块的数据上下文中检索您的整个角色对象。从那里开始,由您来构建代码以检索您想要的信息。基本上,与其尝试从 UI 中检索信息,不如让您的 UI 与您的对象结构相匹配,然后从那里开始工作。

于 2013-07-04T10:06:41.933 回答