2016-04-22 70 views
2

我需要將對象數組Image s綁定到WrapPanel。使用ItemsControl綁定對象數組

我已經宣佈在主類的構造函數的對象:

public MainWindow() 
{ 
    InitializeComponent(); 
    private Masina[] _masina = new Masina[12]; 
    DataContext = new 
    { 
     data1 = _masina 
    }; 
} 

Masina類富人裏面的幾個變量,但我要綁定只是Image

public class Masina 
{ 
    public Image masina_pav = new Image(); 
    public bool r_mas; 
    public string s_mas; 

    public Masina() 
    { 
     byte[] buffer = File.ReadAllBytes("teksturos/masinos/red/top.png"); 
     MemoryStream memoryStream = new MemoryStream(buffer); 

     BitmapImage bitmap = new BitmapImage(); 
     bitmap.BeginInit(); 
     bitmap.DecodePixelWidth = 100; 
     bitmap.DecodePixelHeight = 200; 
     bitmap.StreamSource = memoryStream; 
     bitmap.EndInit(); 
     bitmap.Freeze(); 

     masina_pav.Source = bitmap; 

     Canvas.SetLeft(masina_pav, 100); 
     Canvas.SetTop(masina_pav, 200); 
    } 
} 

我已經試過這XAML代碼:

<WrapPanel Name="zem" Height="1000" Width="1108" > 
     <ItemsControl ItemsSource="{Binding data1}" DisplayMemberPath="masina_pav"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel Name="masinu_sarasas" HorizontalAlignment="Center" IsItemsHost="True" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
</WrapPanel > 

現在程序開始,但不要告訴我任何Image(應該是其中的12個)。有人能幫我弄清楚嗎?

+0

它顯示圖像類名嗎? –

+0

您正在使用字段,使用屬性。 – Wobbles

回答

1

Image是不應在視圖模型中使用的視圖類。相反,您的班級應提供ImageSource類型的公共財產。請注意,這是屬性,而不是您聲明的字段。這是必要的,因爲WPF數據綁定僅適用於公共屬性。

public class Masina 
{ 
    public ImageSource MasinaPav { get; private set; } 
    ... 

    public Masina() 
    { 
     using (var fileStream = new FileStream(
      "teksturos/masinos/red/top.png", 
      FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      var bitmap = new BitmapImage(); 
      bitmap.BeginInit(); 
      bitmap.DecodePixelWidth = 100; 
      bitmap.DecodePixelHeight = 200; 
      bitmap.StreamSource = fileStream; 
      bitmap.EndInit(); 
      bitmap.Freeze(); 

      MasinaPav = bitmap; 
     } 
    } 
} 

現在你的ItemsControl將有ItemTemplate與被綁定到視圖模型性的圖像控制:

<ItemsControl ItemsSource="{Binding data1}"> 
    ... 
    <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding MasinaPav}"/> 
      </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

除此之外,你應該小心設置的BitmapImage的DecodePixelWidthDecodePixelHeight,因爲它可能會破壞位圖的寬高比。