首页 > 解决方案 > 如何绑定到集合的特定元素?

问题描述

例如,我有一个集合,其中数据存储如下:

class MyVector3
{
   double X { get; set; }
   double Y { get; set; }
   double Z { get; set; }
}
ObservableCollection<MyVector3> Positions { get; } = new ObservableCollection<MyVector3>();
Positions.Add(new MyVector3() { X = 0.0, Y = 0.0, Z = 0.0 });
Positions.Add(new MyVector3() { X = 1.0, Y = 1.0, Z = 1.0 });
Positions.Add(new MyVector3() { X = 2.0, Y = 2.0, Z = 2.0 });
...

在图像中表示,如下所示。

图片1

我想在 Positions 属性中绑定特定元素的值。

class ModelData
{
   List<MyVector3> ModelPositions { get; set; }
   ...
}
SomeCollection<ModelData> ModelDatas { get; } = new SomeCollection<ModelData>();
ModelDatas.Add(new ModelData() // ModelData 1
{
   ModelPositions = new List<MyVector3>()
   {
      Positions[0],
      Positions[3],
      Positions[9],
      ...
   };
});
ModelDatas.Add(new ModelData() // ModelData 2
{
   ModelPositions = new List<MyVector3>()
   {
      Positions[4],
      Positions[3],
      Positions[7],
      Positions[10],
      ...
   };
});
...

Positions 属性的状态始终在变化。元素可以添加或删除,元素的数据也可以更改。所有这些更改都应该反映到 ModelData 对象中。

在上面的示例代码中,ModelData 1 和 ModelData 2 共享 Postions 属性的索引 3 的值。如果 Positions 属性的索引 3 元素的值发生了变化,那么如何仅将这种变化通知到添加到 ModelDatas 属性中的 ModelData 1 和 ModelData 2 的元素?

标签: c#design-patternsdata-binding

解决方案


推荐阅读