繁体   English   中英

从代码检索从列表视图的数据模板动态生成的对象

[英]From Code Retrieve dynamically generated objects from listview's datatemplate

标题中的关键是我想检索一个包含在listviewitem的数据模板中的对象,尤其是画布。

我在ViewModel属性MySimpleData中有一个ObtsableCollection int 与每个int相关联的是一个画布。 本质上,我使用列表视图显示“图片”数组。 用户可以单击按钮来更改“画布”的内容。 但是,单个图片对象可以持续许多帧,因此我不将其存储在画布中,而是存储在具有起始索引和持续时间的单独位置。 我想以程序方式在listview中生成每个画布。 如何为每个索引检索画布?

我正在寻找以下方面的东西:

MyListView.Items。(相关数据模板)。(相关画布)

我的目标是从本质上清除所有画布,并在需要时重新绘制/刷新它们。 这是一个模拟/演示,所以我不介意解决方案是否有点怪异。 我只需要一些效果很好的东西,而无需我编写自己的控件。

我的意图是本质上迭代MyListView.items调用,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>

任何想法将不胜感激。

干杯。

因此,我最终将其替换为画布对象的集合。 下一步是替换绑定并使用内容演示者直接显示我收藏中的画布。 我进行的另一项有用更改是对第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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM