0

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

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

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

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

我的目标是基本上清除所有画布并在需要时重新绘制/刷新它们。这是一个模型/演示,所以我不介意解决方案是否有点 hacky。我只需要一些运行良好且不需要我自己编写控件的东西。

我的意图是迭代 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>

任何想法将不胜感激。

干杯。

4

1 回答 1

0

所以我最终用一组画布对象替换了这个集合。下一步是替换绑定并使用内容演示器,以直接显示我收藏中的画布。我所做的另一项有用更改是对第 1 列代码显示我的项目的索引。不像我想要的那样hacky,但可以说足够hacky。

<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 回答