簡體   English   中英

ListViewItem 的 UWP 顯示索引

[英]UWP Display Index of ListViewItem

幾個小時以來,我一直在尋找一種解決方案來顯示 ListView 中項目的索引。 我無法向數據源添加新屬性,作為綁定到值的索引屬性。

我一直在嘗試綁定到轉換器:

    <DataTemplate x:Key="TubeTemplate" x:DataType="data:Tube">
        <local:TubeTemplate HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                            FavoritesNumber="{Binding Converter={StaticResource IndexConverter}}"
                            Closed="TubeTemplate_Closed"></local:TubeTemplate>
    </DataTemplate>

這是轉換器:

public sealed class IndexConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var item = (ListViewItem)value;
        var listView = ItemsControl.ItemsControlFromItemContainer(item) as ListView;
        int index = listView.IndexFromContainer(item) + 1;
        return index.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

問題是我的代碼在以下位置中斷: var item = (ListViewItem)value;

我得到的值是綁定到每個項目的 DataType,而不是 ListViewItem。

我究竟做錯了什么?

在綁定中使用 {RelativeSource Mode=TemplatedParent}。 然后,您可以在 VisualTreeHelper 的幫助下獲取 ItemContainer,如下所示。

<local:TubeTemplate ...
    FavoritesNumber="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource IndexConverter}}"
.../>

public object Convert(object value, Type targetType, object parameter, string language)
{
    var presenter = value as ListViewItemPresenter;
    var item = VisualTreeHelper.GetParent(presenter) as ListViewItem;

    var listView = ItemsControl.ItemsControlFromItemContainer(item);
    int index = listView.IndexFromContainer(item) + 1;
    return index.ToString();
}

但是,以這種方式顯示的索引不會在集合更改時自動更新。 因此,如果您之后要刪除一些項目,則必須實現另一個函數來請求每個項目重新加載其索引。

嘗試使用AlternationIndex 同樣根據這個答案,你應該使用 ListViewItem 作為RelativeSource

在你的情況下,它看起來像

    <DataTemplate>
        <TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex), 
            RelativeSource={RelativeSource AncestorType=ListViewItem},
            StringFormat={}Index is {0}}">
        </TextBlock>
    </DataTemplate>

暫無
暫無

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

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