2017-01-19 2 views
0

Я пытаюсь поместить данные из объекта в код в список в пользовательском интерфейсе, но я не могу найти правильный путь для этого. Я попробовал несколько, которые я нашел в Интернете, включая некоторый учебник, но я всегда сталкиваюсь с теми же проблемами.Update Listview с данными объекта

Большинство примеров приведены на C#, но я код в VB для этого проекта. У меня есть опыт C#, но я не уверен, что здесь проблема.

Вот мой XAML:

<ListView x:Name="AD_AccountList" > 
       <!--<ListView.ItemTemplate> 
        <DataTemplate> 
         <WrapPanel> 
          <TextBlock Text="{Binding tt1}"/> 
          <TextBlock Text="{Binding tt2}"/> 
          <TextBlock Text="{Binding tt3}"/> 
         </WrapPanel> 
        </DataTemplate> 
       </ListView.ItemTemplate>--> 
       <ListView.View> 
        <GridView> 
         <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding tt1}" /> 
         <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding tt2}" /> 
         <GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding tt3}" /> 
        </GridView> 
    </ListView.View> 
</ListView> 

Я попытался с и без шаблона или GridView. Оба дают тот же результат: Либо имеют пустую строку, либо таблицу заполняют с именем объекта «App.testt»

Кажется, что проблема связана с тем, как WPF обрабатывает тип данных, но я читал, что этот шаблон должен в основном решить эту проблему вопрос.

Мой код в VB:

Private Sub Test_Click(sender As Object, e As RoutedEventArgs) 
    Dim testlist As New List(Of testt) 
    testlist.Add(New testt("aaa", "bbb", "ccc")) 
    testlist.Add(New testt("ddd", "fff", "ggg")) 
    testlist.Add(New testt("www", "eee", "111")) 

    MessageBox.Show(testlist(0).tt1) 
    Dispatcher.Invoke(Sub() 
          AD_AccountList.ItemsSource = testlist 
         End Sub) 
    End Sub 
End Class 

Public Class testt 
    Public tt1 As String 
    Public tt2 As String 
    Public tt3 As String 

    Sub New(tt1 As String, tt2 As String, tt3 As String) 
     Me.tt1 = tt1 
     Me.tt2 = tt2 
     Me.tt3 = tt3 
    End Sub 
End Class 

MessageBox был для тестирования и на самом деле показать мне данные, которые я затребовать для, так что мой объект заполняется данными точно.

Я довольно новичок в WPF. Я перемещаю программное обеспечение из win32 в WPF, но я не хочу делать это простым способом, поэтому, если это возможно, мне бы хотелось по-настоящему справиться с этим в WPF.

Я не возражаю против ссылки на что-то, что может помочь или что-то ссылаться, но в итоге я исчерпал это в своих исследованиях.

С уважением,

ответ

1

Вы не можете связываться с полями в XAML, только к свойствам. testt имеет поля, а не свойства.

Try изменения полей в авто Реализуемый свойства:

Public Property tt1 As String 
Public Property tt2 As String 
Public Property tt3 As String 
+0

что-то особенное в WPF? это работает отлично, но пытается понять, что именно и как это работает. В любом случае, спасибо. –

+1

@DrizztDoUrden WPF, Silverlight, UWP - любой вкус XAML. Это не первая вещь. Привязки просто реализуются именно так. Структура создает экземпляр класса 'Binding' для каждой привязки. Он (упрощая несколько) получает свойство, с которым вы связываетесь, отражением, и он просто не удосуживается просить поля. Он ищет только свойства. –

+0

Спасибо. Почувствуйте, что это СУПЕР важно и что я должен был знать, что с самого начала ... Было бы явно помогло :) –