2015-02-09 3 views
0

Я немного искал эту информацию, но не могу найти источник, который объясняет, почему это не работает.Переплет объекта с индексом Элемент списка

Если у меня есть этот кусок кода:

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, которые меня ограничивают.

Благодаря ...

ответ

0

Это не работает, потому что WPF не имеет возможности узнать, что вы добавили ничего fdVectors.

Вы должны использовать ObservableCollection<T> вместо List<T>, если вы хотите, чтобы WPF реагировал на добавления/вычитания.

Либо это, либо ваш размещенный код - это не то, что вы используете. Я изо всех сил, чтобы увидеть, как это даже компилирует:

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

ли myFastDataVectorsList или FastDataVectors?

+0

Вы правы, код был неправильным. Я сейчас обновился. Я вынужден использовать IList, поскольку все это используется с инструментами Telerik DataAccess, которые отступают от SQLite DB. ObservableCollection, который я использовал для широкого использования, все были заменены на ILists. Теперь я строю пользовательский интерфейс более структурированным образом, я попал в эту проблему. У меня создалось впечатление, что IList все-таки дал вам триггеры уведомления, когда все изменилось. – MikeyTT

+0

Причина, по которой я думал, что значение float, которое является списком Floats, обновляется в пользовательском интерфейсе без каких-либо проблем – MikeyTT

+0

Я могу только предположить, что вы каким-то образом инициируете обновление привязки после того, как вы добавили float. установка myFastData на что-то). Опять же, можно только догадываться, как не видно реального кода. – GazTheDestroyer

Смежные вопросы