我正在使用EF5数据模型,其中相关实体被收集到HashSet中。我想将一个元素绑定到HashSet中的第一个相关实体。我已经看到SO上的答案(here和here)建议使用以下内容:
<DataGridComboBoxColumn SelectedValueBinding="{Binding LeadSteps[0].NewZoneID}"/>
但这取决于具有索引器的集合,HashSet没有。
(如果无法做到这一点,我可以在实体的部分类中创建一个属性,并绑定到该实体。)
当集合没有实现整数索引器时,如何绑定到集合中的第n项?
答案 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}" />