簡體   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