Связывание данных с наблюдаемой коллекцией строк

У меня есть следующий класс:

public class MyClass
{
    public ObservableCollection<string> MyList { get; set; }
    public string MyListTitle { get; set; }
...

Я заполняю его следующим образом:

MyClass myClass = new MyClass("Data"); // Populates title

myClass.MyList.Add("Test data 1");
myClass.MyList.Add("Test data 2");

myListView.DataContext = MyClass.MyList;

Наконец, вот XAML:

<ListView Visibility="Visible" x:Name="myListView" Height="Auto">
    <ScrollViewer x:Name="contentScrollView">
        <TextBlock x:Name="DataItem" Text="{Binding}" />                                
    </ScrollViewer>
</ListView>

Результат (и проблема) заключается в том, что я получаю имя класса, отображаемое один раз в списке, а не две записи выше.


person Paul Michaels    schedule 14.09.2012    source источник
comment
так что вы получите только Test data 1   -  person Nikhil Agrawal    schedule 14.09.2012
comment
Нет - я получаю имя класса MyClass (один раз)   -  person Paul Michaels    schedule 14.09.2012


Ответы (4)


Сначала вам нужно установить свойство ItemsSource ListView на ваш ObservableCollection

myListView.ItemsSource = myClass.MyList;

Кроме того, для отображения фактические предметы:

<ListView.ItemTemplate>
 <DataTemplate>
   <TextBlock x:Name="DataItem" Text="{Binding}" /> 
 </DataTemplate>
</ListView.ItemTemplate>
person Dylan Meador    schedule 14.09.2012

Вы привязываете TextBlock, поэтому вы получаете .ToString() списка. Вам нужно связать ItemsSource вашего списка, таким образом ListView свяжет свои элементы с теми, которые находятся внутри вашего списка.

person Erre Efe    schedule 14.09.2012

Возможно, этот

myListView.DataContext = MyClass.MyList;

Станет

myListView.DataContext = myClass.MyList; //note the case of myClass
person oleksii    schedule 14.09.2012

Так должно быть

<ListView x:Name="myListView" Height="Auto" ItemsSource="{Binding MyList}">            
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock x:Name="DataItem" Text="{Binding}" />
            </DataTemplate>
        </ListView.ItemTemplate>            
    </ListView>

а также

MyClass myClass = new MyClass();

        myClass.MyList = new ObservableCollection<string>();
        myClass.MyList.Add("Test data 1");
        myClass.MyList.Add("Test data 2");

        this.DataContext = myClass;

а также

public class MyClass
{
    public ObservableCollection<string> MyList { get; set; }
    public string MyListTitle { get; set; }

    public MyClass()
    {

    }
}

Результат

введите здесь описание изображения

person Nikhil Agrawal    schedule 14.09.2012