C# 使用ItemsControl绑定对象数组
我需要将对象C# 使用ItemsControl绑定对象数组,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我需要将对象Images的数组绑定到WrapPanel 我在主类构造函数中声明了对象: public MainWindow() { InitializeComponent(); private Masina[] _masina = new Masina[12]; DataContext = new { data1 = _masina }; } 我的类Masina中几乎没有变量,但我只想绑定Image: public class Masin
Image
s的数组绑定到WrapPanel
我在主类构造函数中声明了对象:
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 >
目前,程序启动,但不向我显示任何图像
(应该是其中的12个)。有人能帮我弄清楚吗
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>
...
除此之外,同时设置位图图像的
DecodePixelWidth
和DecodePixelHeight
时应小心,因为这可能会破坏位图的纵横比。是否显示图像类名?使用字段,使用属性。