2010-04-08 27 views
1

哎呀,我已經做了幾年的asp.net,一年的asp.net mvc,現在:silverlight。 再次感覺像一個新手。使用Silverlight中的數據填充listbox,要走哪條路?

我想用數據項填充列表框,夠公平嗎? 我想顯示圖像名稱和圖像。

這就是我目前看到的: 用虛擬數據創建一個數據源,並將集合綁定到列表框(designtime)。 Beldn創建一個數據模板,並顯示虛擬數據。但是,那麼在運行時用真實數據創建一個新的數據源並綁定那個數據源呢?

或者兩個:使用MVVM。使用ObservableCollection類型的屬性創建對象,並讓列表框和屬性協作。只聽說過這個,所以不知道如何實現它:)

第三種:在後面的代碼中輸入全部內容:獲取數據,創建listboxitems,將它們添加到列表框(也許硬編碼佈局,沒有XAML需要)

我必須說第三個選擇是簡單的,因爲聽起來很熟悉,其他兩個與我的觀點有很大的不同,我不知道從哪裏開始。

我想補充一點:我看過一些Silverlight視頻,他們都是在Blend中完成的,所以我在Blend看到的第一個,我讀過的第二個,第三個是我知道的怎麼做。長長的故事,如果你能給我一隻手,我會很感激。

回答

1

你應該使用選項二 - MVVM是要走的路。 的基本步驟是這樣的:
1)定義類,從INotifyPropertyChanged的
獲得

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

2)定義數據模板的類,以便列表框知道如何顯示的項目

<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> 

你應該check out this tutorial on ScottGu's Blog

+0

謝謝,我要去嘗試。 Scott不使用mvvm嗎?他只是將數據綁定到代碼後面的網格中? – Michel 2010-04-08 20:01:56

+0

順便說一下,我在哪裏聲明我的viewmodel變量,以便它在數據綁定窗口中可用? – Michel 2010-04-08 20:02:38

+1

簡單來說,可能是將窗口的datacontext屬性設置爲viewmodel對象。那麼,當你綁定數據時,你只需要設置Path屬性。 – 2010-04-08 20:12:11