2013-11-26 59 views
0

我設法讓自定義列表框綁定:Silverlight的列表框用帆布和圖像

<ListBox x:Name="ImageList" ItemsSource="{Binding ImageControls}" Width="256" Height="256" Margin="256,0,0,0"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Canvas/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemContainerStyle> 
      <Style> 
       <Setter Property="Canvas.Top" Value="{Binding Top}" /> 
       <Setter Property="Canvas.Left" Value="{Binding Left}" /> 
       <Setter Property="ListBoxItem.Width" Value="128" /> 
       <Setter Property="ListBoxItem.Height" Value="128" /> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <Image Source="{Binding Source}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

現在我有問題,結合... ImageList.ItemsSource總是空。

我擁有財產性

public ObservableCollection<ImageControl> ImageControls; 

它包含的

public class ImageControl 
{ 
    public WriteableBitmap Source { get; set; } 
    public int Top { get; set; } 
    public int Left { get; set; } 
} 

我需要看到somethink這樣的集合: enter image description here

在結果,從代碼添加列表中的元素後,我想要接收像(帶有來源的圖像)的項目:

 <ListBoxItem Canvas.Left="0" Canvas.Top="0" Width="128" Height="128"> 
      <Image x:Name="Image1"/> 
     </ListBoxItem> 
     <ListBoxItem Canvas.Left="128" Canvas.Top="0" Width="128" Height="128"> 
      <Image x:Name="Image2"/> 
     </ListBoxItem> 
     <ListBoxItem Canvas.Left="0" Canvas.Top="128" Width="128" Height="128"> 
      <Image x:Name="Image3"/> 
     </ListBoxItem> 
     <ListBoxItem Canvas.Left="128" Canvas.Top="128" Width="128" Height="128"> 
      <Image x:Name="Image4" /> 
     </ListBoxItem> 

在代碼中,我添加了相似圖片:

ImageControls.Add(new ImageControl { Source = _bmp, Left = 0, Top = 0}); 

我該怎麼辦了? 謝謝!

+0

「ImageList.ItemsSource始終爲空」 - 什麼是ListBox的DataContext?它必須是具有ImageControls屬性的類。你什麼時候初始化ImageControls?在InitializeComponent之前還是之後?如果以後你發射了一個Propertychanged事件? –

回答

0

似乎問題在於您在ImageControl類中聲明來源屬性的方式。它使用了一個WriteableBitmap(我沒有使用它)。但是,在您的XAML代碼中,源屬性對於圖像控件期望您指定一種類型的字符串o Uri類型。 嘗試更改ImageControl類中的Source屬性作爲字符串。

public class ImageControl 
{ 
    public string Source { get; set; } 
    public int Top { get; set; } 
    public int Left { get; set; } 
} 

希望這有助於

+0

但我需要Source作爲WritableBitmap,而不是一個字符串。當我硬編碼列表項目(我寫在最後),我可以改變它的圖像來源與可寫位圖,他們改變,並且所有工作正確(但在這個變種硬編碼項目)。 –

0

作品!我添加到我的控件構造函數中:

ImageControls = new ObservableCollection<ImageControl>(); 
(It was before)InitializeComponent(); 
ImageList.ItemsSource = ImageControls; 

即,我在init上添加綁定源。 後來我就用我的ImageControls收集工作,像這樣:

ImageControls.Add(new ImageControl { Left = 128, Source = _bmp, Top = 0 }); 

而且列表框的項目增加了!