属性 索引列表项的绑定

Property binding of indexed List item

我已经 google 了解了一点,但似乎无法找到解释为什么这不起作用的来源。

如果我有这段代码:

public class FastData : INotifyPropertyChanged
{
    private IList<FastDataVectors> fdvectors;
    public IList<FastDataVectors> fdVectors {get { return fdvectors; } set { if (fdvectors == value) return; SetProperty(ref fdvectors, value); } }

    private IList<float> fdfloat;
    public IList<float> fdFloat {get { return fdfloat; } set { if (fdfloat == value) return; SetProperty(ref fdfloat, value); } }
...
}

public class FastDataVectors : INotifyPropertyChanged
{
    private float fdvangle;
    public float fdvAngle {get { return fdvangle; } set { if (fdvangle == value) return; SetProperty(ref fdvangle, value); } }
...
}

private FastData myfastdata;
public FastData myFastData {get { return myfastdata; } set { if (myfastdata == value) return; SetProperty(ref myfastdata, value); } }

private List<FastDataVectors> myfastdatavectors;
public List<FastDataVectors> myFastDataVectors {get { return myfastdatavectors; } set { if (myfastdatavectors == value) return; SetProperty(ref myfastdatavectors, value); } }

...
myFastData = new FastData();
myFastData.fdVectors = new List<FastDataVectors>();
myFastData.fdVectors.Add(new FastDataVectors() {fdvAngle = 10});   
myFastData.fdVectors.Add(new FastDataVectors() {fdvAngle = 20});

myFastData.fdFloat.Add(10);
myFastData.fdFloat.Add(20);

此文本块位于 XAML

<TextBlock Text="{Binding myFastData.fdVectors[0].fdvAngle}"/>
<TextBlock Text="{Binding myFastData.fdVectors[1].fdvAngle}"/>

我希望它显示“10 & 20”,但我只是收到一个绑定错误,奇怪的是“...指定的参数超出了有效值的范围”。

但是,如果我尝试 XAML 这一段,它会完美地工作:

<TextBlock Text="{Binding myFastData.fdFloat[0]}"/>
<TextBlock Text="{Binding myFastData.fdFloat[1]}"/>

我真的不知道我在搜索什么以及 google 在 "wpf c# binding property index array list" 上搜索的前几页,不要 return 任何可以解释这个的东西.

所以这个问题其实是双重的:

1) 为什么这不起作用?

2) 除了我如何解决它之外,还有更好的方法来解决我想做的事情吗?

注意:这是我刚刚编写的简化代码块,可能包含错误和奇怪的代码遗漏位来说明。

编辑:我更新了代码以更好地表示我实际在做什么。我也不能使用 ObservableCollection,因为我正在使用 Telerik DataAccess 工具,它将 class 支持到 SQLite 数据库。即使查看 Telerik 记录的自定义流畅集合方法,在我的场景中也是不可能的,因为主要数据 classes 在 PCL 中,这限制了我。

谢谢...

它不起作用,因为 WPF 无法知道您向 fdVectors 添加了任何内容。

如果您希望 WPF 对 additions/subtractions 作出反应,您需要使用 ObservableCollection<T> 而不是 List<T>

那个或您发布的代码不是您的代码 运行。我正在努力看看它是如何编译的:

myFastDataVectors = new List<FastDataVectors>();
myFastDataVectors.fdvAngle = 10;

myFastDataVectorsList还是FastDataVectors