【发布时间】:2020-07-06 22:37:16
【问题描述】:
几个小时以来,我一直在寻找一种解决方案来显示 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。
我做错了什么?
【问题讨论】:
-
第一:为什么不能给模型添加索引属性?其次:您缺少
value所依赖的 Binding 的ConverterParameter属性。 -
如果只使用
Binding关键字,则会绑定创建这个DataTemplate的数据模型,即Tube类的一个实例。如果要获取索引,建议将索引写入Tube类并绑定属性,而不是通过模板元素向上查询父元素