Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ItemsControl绑定对象数组_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

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
时应小心,因为这可能会破坏位图的纵横比。

是否显示图像类名?使用字段,使用属性。