簡體   English   中英

從 GridViewColumn 獲取 CellTemplate 綁定

[英]Get CellTemplate binding from GridViewColumn

所以,我有這個 ListView 需要根據綁定的內容使用一些自定義比較函數。 到目前為止,我找到的唯一解決方案是在使用 CellTemplates 綁定更復雜的對象(例如帶有圖標和文本的 object)時,使用自定義屬性來聲明( SortablePropertyName )用作綁定源的內容。

...
<ui:MyListView Grid.Row="1" ItemsSource="{Binding SubComponents}" SelectionChanged="SubComponentSelectionChanged" SelectionMode="Extended" VirtualizingStackPanel.IsVirtualizing ="False" Margin="2" DefaultSortingColumnHeader="Label" Grid.ColumnSpan="2">
  <ui:MyListView.View>
     <GridView>
         <ui:MyGridViewColumn Header="Solution" Width="200" SortBy="Context" SortablePropertyName="SolutionVisualizationViewModel">
           <GridViewColumn.CellTemplate>
               <DataTemplate>
                  <bcp:MyObjectVisualizationView DataContext="{Binding SolutionVisualizationViewModel}"/>
               </DataTemplate>
           </GridViewColumn.CellTemplate>
       </ui:MyGridViewColumn>
...

因為稍后在處理排序時,我需要有關已用於當前列的 ViewModel 的哪些屬性的信息。

foreach (MyGridViewColumn column in columns)
{
    //Sort by context
    if (column.SortBy == MyListViewSorting.SortOption.Context)
       {   
        if (column.SortDirectionType == MyListViewSorting.SortDirectionType.Ascending)
           {             
               listViewCollection.CustomSort = new ContextComparer(column.SortablePropertyName);
            }
...

我可以通過添加DependencyObject data = column.CellTemplate.LoadContent() as DependencyObject; 掌握已使用的視圖,但仍然不是我想要的。

是否可以在不必使用屬性的情況下找出與列關聯的綁定 'DataContext="{Binding VisualizationViewModel}'?是否可以在綁定和 GridViewColumn 之間找到任何“鏈接”以有望解決此問題?

是否可以在不必使用屬性的情況下找出與列關聯的綁定 'DataContext="{Binding VisualizationViewModel}'?

您可以使用LoadContent()方法實現模板並檢查其中根元素的DataContext屬性。

或者,假設已經應用了模板,您可以使用GetCellContent方法獲取對根元素的引用。

您還可以覆蓋GenerateElement方法。

但是使用屬性可能更容易。

模板只是一個模板,沒有元素實例化,綁定應用和源值被解析,直到它被實際應用。 該列不關心/不知道它的CellTemplate中有什么。 它只是實現模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM