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

        }

データを表示するためにテキストブロックを配置したエキスパンダービュー内でわかるように、これらのテキストブロックの1つをクリックすると、リスト内のそのアイテムのインデックスとインデックスも取得したいリスト内のエキスパンダー ビュー。これを行う方法がわかりません。

より良いアイデアを提供するために、ロード後のリストの写真を次に示します。 エキスパンダービュー

たとえば、「po Mobile」という見出しの下にある「line manager」をクリックすると、その 2 つの項目のリストで line manager テキストブロックのインデックスが必要になり、大きなリストで po mobile のインデックスが必要になります。

これはすべて動的データであるため、リスト内のアイテムの量は変化します。

解決済み : Kookizがくれたアドバイスから、これが私がしたことです。1. 必要なすべてのデータを textblock タグに追加しました。私の他のページの読み込みで

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ので、それがどのように機能するかを知っていると思います. より複雑なタイプを使用して、トランザクション タイプとともにインデックスを格納してください。ただし、既存の要素の前に新しい要素を追加すると、インデックスが古くなる可能性があるため、アイテムをどのように更新するかによって異なります。

最後になりましたが、expanderview に各項目を手動で追加する代わりに、ItemTemplate を設定し、リストを expanderview の ItemsSource プロパティに割り当てることができます。次に、Tapイベントでは、テキストブロックのデータコンテキストからロール オブジェクト全体を取得できます。そこから、必要な情報を取得するコードを構築するのはあなた次第です。基本的に、UI から情報を取得しようとする代わりに、UI をオブジェクト構造に一致させ、そこから作業を進めます。

于 2013-07-04T10:06:41.933 に答える