1

ExpanderView を使用してアプリにデータを表示しています。しかし、選択された後に ExpanderViewItem のデータを取得する方法を見つけるのに苦労しています。

ListBox では、xaml コードで SelectionChanged="yourFunction" を呼び出すことができます。しかし、expanderview については、これを行う方法がわかりません。

これは、エキスパンダーの XAML コードです。

 <!--Custom header template-->
    <DataTemplate x:Key="CustomHeaderTemplate">
        <TextBlock Text="" FontSize="28" />            
    </DataTemplate>

    <!--Custom expander template-->
    <DataTemplate x:Key="CustomExpanderTemplate">

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Rectangle Width="400" Height="60" Fill="#FFF1F1F1" HorizontalAlignment="Stretch" StrokeThickness="0" Grid.Row="0" Grid.Column="0" />
            <TextBlock Text="{Binding procedureName}" FontSize="30" Foreground="#FF00457C" FontWeight="Normal" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Margin="10,0,0,0" />

        </Grid>

    </DataTemplate>

    <!--Custom expander items template-->
    <DataTemplate x:Key="ExpanderViewItems" >

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="15" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto" />
                <ColumnDefinition Width="auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Image Source="{Binding flagIcon}" Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" />
            <TextBlock FontSize="26" Text="{Binding N}" Foreground="Black" FontWeight="Normal" Grid.Row="0" Grid.Column="1"/>
            <TextBlock FontSize="20" Text="{Binding RNG}" Foreground="Black" FontWeight="Normal" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="2"/>                
            <TextBlock FontSize="26" Text="{Binding ValueAndUnit}" Foreground="Black" FontWeight="Medium" HorizontalAlignment="Right" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"/>
            <TextBlock FontSize="18" Text="{Binding COM}" Foreground="Black" FontWeight="Normal" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" TextWrapping="Wrap" />
            <Line StrokeThickness="1" Stroke="#C4C6CC" Stretch="Fill" X1="0" X2="1" Y1="0" Y2="0" VerticalAlignment="Center" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" />
        </Grid>
    </DataTemplate>

<!--Listbox Containing ExpanderViews-->
            <ListBox Name="testsList" Grid.Row="3" Grid.Column="0" >
                <ListBox.ItemTemplate>
                    <DataTemplate>

                        <!--ExpanderView-->
                        <toolkit:ExpanderView Header="{Binding}"                                                   
                                              HeaderTemplate="{StaticResource CustomHeaderTemplate}"
                                              Expander="{Binding}"
                                              ExpanderTemplate="{StaticResource CustomExpanderTemplate}"
                                              x:Name="expander" 
                                              FontSize="36" 
                                              Foreground="#FF00457C" 
                                              ItemsSource="{Binding testItems}"
                                              ItemTemplate="{StaticResource ExpanderViewItems}" >                          
                        </toolkit:ExpanderView>

                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

正しい方向への助けに本当に感謝します! これは、ウェブ上では簡単には答えられない質問のようです。

4

3 に答える 3

2

@Frederik ListBoxのSelectionChangedイベントを使用して、上記のコードで行ったことを実装しました-それでも問題なく動作します。しばらく壁に頭をぶつけていましたが、ようやく解決できました。まず、ItemTemplate について、テンプレートが次のように ListBoxItem 要素に配置されていることを確認しました。

<DataTemplate x:Key="ExpanderViewItems" >
<ListBoxItem DataContext="{Binding}" Tap="ListBoxItem_Tap_1">
<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="15" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Image Source="{Binding flagIcon}" Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" />
        <TextBlock FontSize="26" Text="{Binding N}" Foreground="Black" FontWeight="Normal" Grid.Row="0" Grid.Column="1"/>
        <TextBlock FontSize="20" Text="{Binding RNG}" Foreground="Black" FontWeight="Normal" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="2"/>                
        <TextBlock FontSize="26" Text="{Binding ValueAndUnit}" Foreground="Black" FontWeight="Medium" HorizontalAlignment="Right" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"/>
        <TextBlock FontSize="18" Text="{Binding COM}" Foreground="Black" FontWeight="Normal" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" TextWrapping="Wrap" />
        <Line StrokeThickness="1" Stroke="#C4C6CC" Stretch="Fill" X1="0" X2="1" Y1="0" Y2="0" VerticalAlignment="Center" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" />
    </Grid>
</ListBoxItem>
</DataTemplate>

これが整ったら、コード ビハインドに移動し、ListBoxItem に対して宣言された Tap イベントで次のようなものを使用します。

ListBoxItem item = sender as ListBoxItem;
ExpanderItemModel model = item.DataContext as ExpanderItemModel;

もちろん、 ExpanderItemModel は、エキスパンダー項目に使用しているものになります...

これは私にとってはうまくいきました

お役に立てれば!

幸運を!

于 2013-01-19T23:01:09.373 に答える
1

リストボックスで「タップ」イベントを使用できます。

XAML ファイルで、タップ イベント リスナーを追加します。

<!--Listbox Containing ExpanderViews-->
        <ListBox Name="testsList" Grid.Row="3" Grid.Column="0" Tap="testsList_Tap" >
            <ListBox.ItemTemplate>
                <DataTemplate>

                    <!--ExpanderView-->
                    <toolkit:ExpanderView Header="{Binding}"
                    ...      

コード ビハインド ファイルで、タップ ハンドラーを実装します。

    private void testsList_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        someModel selectedItem = (someModel)this.testsList.SelectedItem;
        // Do something with your seleted data
        ...
    }
于 2013-01-10T21:53:54.653 に答える
0

listbox selectionchanged または expanderview の展開イベントによって、選択した値を取得できます。リストボックスの場合:

    private void lstExams_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count > 0)
        {
            Model.ExamTitles data = (sender as ListBox).SelectedItem as Model.ExamTitles;
           }
     }

ここで、ExamTitles はコレクションを含むクラスです

エキスパンドビューの場合

    private void ExpanderView_Expanded(object sender, RoutedEventArgs e)
    {
        ExpanderView expview = (sender as ExpanderView);
        Model.ExamTitles data = expview.Header as Model.ExamTitles;
    }

お役に立てれば!

于 2013-02-19T12:32:30.307 に答える