2013-06-04 3 views
1

Я делаю приложение для Windows Store. На главной странице XAML у меня есть ListView, и я пытаюсь связать его с наблюдаемой коллекцией в файле, находящемся за кодом.Почему ListView не заполняется DataSource?

Но я вижу пустой экран. Почему список не заселен?

EDIT:

Я делаю приложение, чтобы отобразить имена некоторых элементов управления пользовательского интерфейса в XAML и я позже добавить событие нажатия на каждой строке списка, чтобы перейти на новую страницу, содержащую демо что контроль, вот почему я использовал имя Control для модели. Я делаю свое собственное приложение для кухонной раковины.

Вот MainPage.xaml:

<ListView x:Name="listOfControls" ItemsSource="{Binding controlsDataSource}" SelectionChanged="listOfControls_SelectionChanged"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding name}"></TextBlock> 
       <TextBlock Text="{Binding desc}"></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

и вот MainPage.xaml.cs

Примечание: используется термин управления в коде это имя, данное мною модельному классу, который не имеет никакого отношения к элемент управления пользовательского интерфейса.

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.IO; 
using System.Linq; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation; 

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 

namespace AllControls 
{ 
    /// <summary> 
    /// An empty page that can be used on its own or navigated to within a Frame. 
    /// </summary> 
    public sealed partial class MainPage : Page 
    { 
     private ObservableCollection<AllControls.Models.Control> controlsDataSource { get; set; } 
     public MainPage() 
     { 
      this.InitializeComponent(); 
      this.controlsDataSource = new ObservableCollection<AllControls.Models.Control>(); 
      this.controlsDataSource.Add(new AllControls.Models.Control("ScrollViewer", "ScrollViewer Desc")); 
      this.controlsDataSource.Add(new AllControls.Models.Control("ScrollViewer", "ScrollViewer Desc")); 
      this.controlsDataSource.Add(new AllControls.Models.Control("ScrollViewer", "ScrollViewer Desc")); 
     } 

     /// <summary> 
     /// Invoked when this page is about to be displayed in a Frame. 
     /// </summary> 
     /// <param name="e">Event data that describes how this page was reached. The Parameter 
     /// property is typically used to configure the page.</param> 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 

     } 

     void listOfControls_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

     } 
    } 
} 

Вот модель, Control.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace AllControls.Models 
{ 
    class Control 
    { 
     private String name{ get;set;} 
     private String desc { get; set; } 
     public Control(String iName, String iDesc) 
     { 
      name = iName; 
      desc = iDesc; 

     } 
    } 

} 
+0

Я создаю приложение для отображения имен некоторых элементов управления пользовательского интерфейса в XAML, и позже я добавлю события click в каждую строку списка, чтобы перейти на новую страницу с демонстрацией этого элемента управления, вот почему я использовал имя Управление моделью. Я делаю свой собственный простой кухонный уголок. –

+1

je kahi lihayachay вопрос babat, прямой вопрос madhye lihit ja – Freelancer

+0

niruttar aahet sagale tumachya prashna pudhe !!! – Freelancer

ответ

0

Таким образом, я получил его на работу.

В XAML,

Вместо ItemsSource="{Binding controlsDataSource}", я указал только ItemsSource="{Binding}

, а затем в MainPage Конструктора в файл кода, я поставил DataContext элемента управления ListView к массиву программно.

public MainPage() 
     { 
      this.InitializeComponent(); 
      this.controlsDataSource = new ObservableCollection<AllControls.Models.Control>(); 
      this.controlsDataSource.Add(new AllControls.Models.Control("ScrollViewer", "ScrollViewer Desc")); 
      this.controlsDataSource.Add(new AllControls.Models.Control("ScrollViewer", "ScrollViewer Desc")); 
      this.controlsDataSource.Add(new AllControls.Models.Control("ScrollViewer", "ScrollViewer Desc")); 
      listOfControls.DataContext = controlsDataSource;  
    } 

Также я сохранил имя и DESc свойства, как частные, которые я обнародовано, может быть, было фактическое изменение необходимо. Я думал, что частные сделают переменные частными и настроенными, и они узнают, смогут ли они быть доступными, но позже я понял, что частный снаружи делает сеттер как приватным.

Thats it.

Это был еще один способ выполнить то, что мне было нужно, но должен быть способ указать список данных в разметке.

Другие ответы приветствуются, но до тех пор никто.

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