属性 索引列表项的绑定
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;
myFastDataVectors
是List
还是FastDataVectors
?
我已经 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;
myFastDataVectors
是List
还是FastDataVectors
?