我已经用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&amp; 20”,但我只是得到一个绑定错误,奇怪的是“...指定的参数超出了有效值的范围”。
但是,如果我尝试使用这块XAML,它的效果非常好:
<TextBlock Text="{Binding myFastData.fdFloat[0]}"/>
<TextBlock Text="{Binding myFastData.fdFloat[1]}"/>
我真的不知道我在搜索什么以及谷歌搜索“wpf c#binding property index array list”的前几页,不要返回任何可以解释这一点的内容。
所以这个问题实际上是双重的:
1)为什么这不起作用?
2)除了我如何解决它之外,有没有更好的方法来解决我想要做的事情?
注意:这是我刚刚编写的简化代码块,可能包含错误和代码遗漏的奇怪位置。
编辑:我已经更新了代码,以更好地代表我实际在做什么。我也不能使用ObservableCollection,因为我正在使用Telerik DataAccess工具,它将类支持到SQLite DB。即使考虑Telerik已经记录的自定义流畅收集方法,在我的场景中也不可能,因为主要数据类在PCL中,这限制了我。
...谢谢
答案 0 :(得分:0)
它不起作用,因为WPF无法知道您已向fdVectors
添加任何内容。
如果您希望WPF对添加/减少作出反应,则需要使用ObservableCollection<T>
而不是List<T>
。
或者您发布的代码不是您正在运行的代码。我很难看到这甚至是如何编译的:
myFastDataVectors = new List<FastDataVectors>();
myFastDataVectors.fdvAngle = 10;
myFastDataVectors
是List
还是FastDataVectors
?