绑定到没有索引器的集合中的特定项目

时间:2014-02-04 12:20:33

标签: wpf data-binding hashset

我正在使用EF5数据模型,其中相关实体被收集到HashSet中。我想将一个元素绑定到HashSet中的第一个相关实体。我已经看到SO上的答案(herehere)建议使用以下内容:

<DataGridComboBoxColumn SelectedValueBinding="{Binding LeadSteps[0].NewZoneID}"/>

但这取决于具有索引器的集合,HashSet没有。

(如果无法做到这一点,我可以在实体的部分类中创建一个属性,并绑定到该实体。)

当集合没有实现整数索引器时,如何绑定到集合中的第n项?

2 个答案:

答案 0 :(得分:1)

您可能需要重新考虑整个情况。 HashSet是一组独特的项目,而不是集合。集合只是为了维护一组成员,并使您能够检查特定项目是否是成员...没有索引,因为设置项目之间没有订单。

虽然您可以在Enumerable.ElementAt<TSource>上调用HashSet方法,但无法保证在为方法提供相同的输入值时它将返回相同的元素。最重要的是,如果HashSet中的项目顺序对您很重要,那么您应该使用集合。

但是,如果你选择忽略这个建议,这就是你如何实现你的要求......只需为你的单HashSet值定义一个包装属性......你可以尝试这样的事情:

public YourHashSetDataType Hash
{
    get { return LeadSteps.ElementAt(0).NewZoneID; }
    set { LeadSteps.ElementAt(0).NewZoneID = value; NotifyPropertyChanged("Hash"); }
}

答案 1 :(得分:1)

我知道这是一个老问题,但我也遇到了同样的问题并找到了我想分享的解决方案。

对我来说有用的是改变引用成员的声明:

public virtual ICollection<MyType> MyVarName { get; set; }

为:

public virtual IList<MyType> MyVarName { get; set; }

在此更改之后,可以使用普通访问者访问集合项:

<TextBlock Text="{Binding MyVarName[0].MyMemberName}" />