Задать вопрос

Не могу связать ObservableCollection с ListView (WPF)?

Здравствуйте уважаемые форумчане. Суть проблемы описана в названии темы. Почему - то мой ListView ничего не отображает во время добавления итема в коллекцию.
public class MySQLCommand
{
     public int Number { get; set; }
     public string Command { get; set; }
     public int Time { get; set; }
     public int Memory { get; set; }
     public int Rows { get; set; }
}

public ObservableCollection<MySQLCommand> _queryInf = new ObservableCollection<MySQLCommand>();
...
public ObservableCollection<MySQLCommand> queryInf
{
     get { return _queryInf; }
}
...
// Если тип пакета COM_QUERY
if (buffer[4] == 3)
{
    Dispatcher.Invoke(new Action(() =>
        _queryInf.Add(new MySQLCommand() { 
             Number = 0, 
            Command = Encoding.ASCII.GetString(buffer, 5, byteRec - 4), 
            Memory = 0, 
            Rows = 0, 
            Time = 0 
         })));
}

В XAML я всё это дело забиндил следующим образом:
<ListView HorizontalAlignment="Left" Height="313" Margin="224,66,0,0" VerticalAlignment="Top" Width="752" x:FieldModifier="public" Name="tProfiler" ItemsSource="{Binding queryInf}">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="номер" DisplayMemberBinding="{Binding Number}"></GridViewColumn>
                        <GridViewColumn Header="запрос" DisplayMemberBinding="{Binding Command}"></GridViewColumn>
                        <GridViewColumn Header="время мс" DisplayMemberBinding="{Binding Time}"></GridViewColumn>
                        <GridViewColumn Header="принято кб" DisplayMemberBinding="{Binding Memory}"></GridViewColumn>
                        <GridViewColumn Header="строки" DisplayMemberBinding="{Binding Rows}"></GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>

Никаких ошибок во время компиляции и выполнения не происходит... Коллекция в итоге не пустая, но вот только в ListView ничего нет. Скажите пожалуйста что я делаю не так?
Заранее спасибо за советы
  • Вопрос задан
  • 4026 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@Sumor
Скорее всего у вас некорректно задан Binding у ListView.
Попробуйте явно задать, например, в конструкторе после инициализации:
tProfiler.ItemsSource = queryInf;
Всё должно получиться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexfarm2
Вопрос был - "почему не работает привязка?". Решение может быть таким.
//****************
Если свойство queryInf находится в частичном классе окна , то привязку к источнику данных в дескрипторе ListView можно записать так: ItemsSource="{Binding Path=queryInf,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
или так:
ItemsSource="{Binding queryInf, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}"
//****************
А если в частичном классе объекта UserControl, то, соответственно, так:
ItemsSource="{Binding Path=queryInf,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
//****************
Если подзабыли как создавать привязки, можно в студии встать в разметке на элемент ListView , в панели свойств найти свойство ItemsSource и щелкнуть на квадратик справа от поля ввода, выбрать «Создать привязку данных». Откроется окно «Создание привязки для …». Там можно поэкспериментировать с привязками
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы