索引的List项的属性绑定

时间:2015-02-09 14:08:33

标签: c# wpf xaml data-binding

我已经用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中,这限制了我。

...谢谢

1 个答案:

答案 0 :(得分:0)

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

如果您希望WPF对添加/减少作出反应,则需要使用ObservableCollection<T>而不是List<T>

或者您发布的代码不是您正在运行的代码。我很难看到这甚至是如何编译的:

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

myFastDataVectorsList还是FastDataVectors