Заполните список с данными в Silverlight, какой путь? - PullRequest
1 голос
/ 08 апреля 2010

ой, я занимаюсь asp.net уже несколько лет, а год asv.net mvc, а теперь уже: silverlight. Почувствуй себя снова пчелой.

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

Это то, что я видел до сих пор: создайте источник данных с фиктивными данными и свяжите коллекцию со списком (время разработки). Beldn создает табличку с данными и показывает фиктивные данные. Но тогда что, создать новый источник данных во время выполнения с реальными данными и связать его?

Или два: используйте MVVM. Создайте объект со свойством типа ObservableCollection и позвольте списку и свойству взаимодействовать. Только слышал об этом, поэтому не знаю, как это реализовать:)

Или третье: введите все это в коде: получите данные, создайте элементы списка, добавьте их в список (возможно, также жестко закодируйте макет, XAML не требуется)

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

Я хочу добавить: я видел несколько видео Silverlight, и все они были сделаны в Blend, поэтому первое, что я видел в Blend, второе, о котором я читал, и третье - это то, что я знаю, как делать.

Длинная история, если вы можете помочь мне, я был бы признателен.

1 Ответ

1 голос
/ 08 апреля 2010

вы должны использовать второй вариант - MVVM - это путь. основные шаги таковы:
1) определить свой класс, производный от INotifyPropertyChanged

public class MyImage : INotifyPropertyChanged
{
    public string ImagePath { ... }
    public bool IsChecked { ... }       
}

2) определите шаблон данных для класса, чтобы ListBox знал, как отображать элементы

<ListBox>
   <ListBox.temTemplate>
      <Setter.Value>
         <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <CheckBox Source="{Binding IsChecked}"/>
              <Image Source="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
     </Setter.Value>
   </Setter>
</ListBox>

4) создайте наблюдаемую коллекцию и заполните ее экземплярами вашего класса

public class DataModel : INotifyPropertyChanged
{
    public ObservableCollection<MyImage> MyItems{...}
}
....
public class MyWindow : Page
{
    public MyWindow ()
    {
        this.DataContext = new DataModel( ); 
    }
}

5) привязать свойство ItemsSource окна списка к коллекции

<ListBox ItemsSource="{Binding MyItems}>
   <ListBox.temTemplate>
      <Setter.Value>
         <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <CheckBox Source="{Binding IsChecked}"/>
              <Image Source="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
     </Setter.Value>
   </Setter>
</ListBox>

вам следует проверить это руководство в блоге ScottGu

...