Я немного искал эту информацию, но не могу найти источник, который объясняет, почему это не работает.Переплет объекта с индексом Элемент списка
Если у меня есть этот кусок кода:
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 на «МОФ C# свойство связывания список массивов индексов ", не возвращайте ничего, что может объяснить это.
Так что вопрос действительно двояка:
1) почему это не работает?
2) кроме того, как я работал вокруг него, есть ли лучший способ исправить то, что я хочу сделать?
Примечание. Это упрощенный фрагмент кода, который я только что написал, и может содержать ошибки и нечетный код пропусков кода для иллюстрации.
Редактировать: Я обновил код, чтобы лучше представлять то, что я на самом деле делаю. Я также не могу использовать ObservableCollection, поскольку я использую инструменты Telerik DataAccess, которые возвращают класс в SQLite DB. Даже если посмотреть на настройку свободного подхода к коллекциям, который Telerik задокументировал, в моем сценарии невозможно, так как основные классы данных находятся в PCL, которые меня ограничивают.
Благодаря ...
Вы правы, код был неправильным. Я сейчас обновился. Я вынужден использовать IList, поскольку все это используется с инструментами Telerik DataAccess, которые отступают от SQLite DB. ObservableCollection, который я использовал для широкого использования, все были заменены на ILists. Теперь я строю пользовательский интерфейс более структурированным образом, я попал в эту проблему. У меня создалось впечатление, что IList все-таки дал вам триггеры уведомления, когда все изменилось. – MikeyTT
Причина, по которой я думал, что значение float, которое является списком Floats, обновляется в пользовательском интерфейсе без каких-либо проблем – MikeyTT
Я могу только предположить, что вы каким-то образом инициируете обновление привязки после того, как вы добавили float. установка myFastData на что-то). Опять же, можно только догадываться, как не видно реального кода. – GazTheDestroyer