如何获取expandderview的索引

时间:2013-07-04 09:57:09

标签: c# list windows-phone-8 expander

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

这是我的代码:

  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);

        }

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

这是加载后的列表图片,以提供更好的主意。 Expanderviews

例如,如果我点击“po Mobile”标题下的“直线经理”,我现在想要2个项目列表中的直线经理文本块的索引,并且我想要po移动设备的索引更大的清单。

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

已解决: 根据Kookiz给我的建议,这就是我所做的, 1.我在textblock标签中添加了我需要的所有数据-see codesnippit, 然后我把它添加到我的导航栏中, 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);

1 个答案:

答案 0 :(得分:2)

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

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

最后但并非最不重要的是,您可以设置ItemTemplate并将列表分配给expandderview的ItemsSource属性,而不是手动将每个项目添加到您的expandderview。然后,在Tap事件中,您可以从文本块的datacontext中检索整个角​​色对象。从那里开始,您需要构建代码以检索所需的信息。基本上,不要试图从UI中检索信息,而是让您的UI与您的对象结构相匹配,并从那里开始工作。