标题中的关键是我想要检索包含在listviewitem的datatemplate中的对象,特别是画布。
我在ViewModel属性MySimpleData中有一个整数的ObservableCollection。与每个int相关联的是画布。基本上我使用listview来显示“图片”数组。用户可以单击更改“画布”内容的按钮。但是,单个图片对象可以持续多个帧,因此我不将它们存储在画布中,而是存储在具有起始索引和持续时间的单独位置中。我想在程序上生成listview中的每个画布。如何为每个索引检索画布?
我正在寻找以下方面的东西:
MyListView.Items。(相关-DataTemplate中)。(相关-Canvas)的
我的目标是基本上清除所有画布并在我想要的时候重新绘制/刷新它们。这是一个模拟/演示,所以我不介意解决方案是否有点hacky。我只需要一些效果很好的东西,不需要我自己编写控件。
我的意图是迭代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>
非常感谢任何想法。
干杯。
答案 0 :(得分:0)
所以我最终用一组canvas对象替换了这个集合。下一步是替换绑定并使用内容展示器,直接显示我的集合中的画布。我做的另一个有用的改变是第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>