0

ここでのタイトルの重要な点は、listviewitem のデータ テンプレートに含まれるオブジェクト、具体的にはキャンバスを取得したいということです。

ViewModel プロパティ MySimpleDataにintの ObservableCollection があります。各 int にはキャンバスが関連付けられています。基本的に、リストビューを使用して「写真」の配列を表示しています。ユーザーは、「キャンバス」の内容を変更するボタンをクリックできます。ただし、1 つの画像オブジェクトで複数のフレームが保持される可能性があるため、それらをキャンバスに保存するのではなく、開始インデックスと期間を指定して別の場所に保存します。リストビューで各キャンバスを手続き的に生成したいと思います。各インデックスのキャンバスを取得するにはどうすればよいですか?

私は次のようなものを探しています:

MyListView.Items.(Related-DataTemplate).(Related-Canvas)

私の目標は、基本的にすべてのキャンバスをクリアし、必要に応じて再描画/更新することです。これはモックアップ/デモなので、解決策が少しハッキリしていてもかまいません。十分に機能し、独自のコントロールを作成する必要がないものが必要なだけです。

私の意図は、基本的に MyListView.items call, related-canvas.clear(); を反復することです。次に、そのキャンバスの画像オブジェクトに対して related-canvas.addChild(Relevant-Picture-Object); を呼び出します。

それが役立つ場合に備えて、これが私のxamlです。

<ListView Name="MyListView" 
    ItemsSource="{Binding MySimpleData}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="Column1"
                                DisplayMemberBinding="{Binding}"/>
                <GridViewColumn Header="Column2-Canvases" 
                    Width="{Binding DataContext.CanvasWidth, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Canvas
                                Width="{Binding DataContext.CanvasWidth, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" 
                                Height="{Binding DataContext.CanvasHeight, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                                Background="LightSlateGray"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

どんなアイデアでも大歓迎です。

乾杯。

4

1 に答える 1

0

そのため、コレクションをキャンバス オブジェクトのコレクションに置き換えることになりました。次のステップは、バインディングを置き換え、コンテンツ プレゼンターを使用して、コレクションにあったキャンバスを直接表示することでした。私が行ったもう 1 つの便利な変更は、アイテムのインデックスを表示するための列 1 のコードに対するものでした。私が探していたほどハックではありませんが、間違いなく十分にハックです。

<ListView Name="MyListView" 
<!-- COMMENT ItemsSource="{Binding MySimpleData}"> END COMMENT-->
ItemsSource="{Binding CanvasCollection}"> <!-- EDIT HERE -->
AlternationCount="{Binding CanvasCollection.Count}"
<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.View>
    <GridView>
        <GridView.Columns>
          <!-- COMMENT <GridViewColumn Header="Column1"
          DisplayMemberBinding="{Binding}"/> END COMMENT -->
              <GridViewColumn Header="Index" Width="37">
                <GridViewColumn.CellTemplate> <!-- NEW Index displaying code -->
                        <DataTemplate>
                            <Label Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=(ItemsControl.AlternationIndex)}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            <GridViewColumn Header="Column2-Canvases" 
                            Width="{Binding DataContext.CanvasWidth, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
          <!-- COMMENT      <Canvas
                            Width="{Binding DataContext.CanvasWidth, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" 
                            Height="{Binding DataContext.CanvasHeight, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                            Background="LightSlateGray"/> END COMMENT -->
                            <ContentPresenter Content="{Binding}" /> <!-- NEW -->
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView.Columns>
    </GridView>
</ListView.View>

于 2013-09-11T01:53:07.303 に答える