Я изо всех сил, чтобы научить себя C#, и долго не прибегая к помощи появился этот ответ:C# WPF Массив вложенных классов с изображением
У меня есть классы Rom, игры и искусства. Rom.Game.Art для изображений и определяется следующим образом:
public class art
{
public Image Screen { get; set; }
public Image Marquis { get; set; }
public Image Logo { get; set; }
public art()
{
BitmapImage Default_image = new BitmapImage();
Default_image.BeginInit();
Default_image.UriSource = new Uri(@"C:\Users\Major Major\Documents\Visual Studio 2013\Projects\Robin\Robin\images\bee_ace.png", UriKind.Absolute);
Default_image.EndInit();
this.Screen = new Image();
this.Screen.Source = Default_image;
this.Marquis = new Image();
this.Marquis.Source = Default_image;
this.Logo = new Image();
this.Logo.Source = Default_image;
}
}
Я хочу, чтобы создать массив дисков, и заполнить множество вложенных свойств и подклассы из DataTable в цикле. Однако, прежде чем попасть в цикл, я просто хочу получить блок тестового кода для работы. Следующие работы просто отлично:
InitializeComponent();
BitmapImage Image_0 = new BitmapImage();
Image_0.BeginInit();
Image_0.UriSource = new Uri(@"E:\Arcade\Art\Box\Intellivision\Congo Bongo.jpg", UriKind.Absolute);
Image_0.EndInit();
ROMS.Insert(0, new Rom());
ROMS[0].Name = "Congo Bongo";
ROMS[0].Game.Art.Screen.Source = Image_0;
ROMS[0].Game.Date = "1983";
ROMS[0].Game.Platform = "Intellivision";
ROM_list.ItemsSource = ROMS;
Моя жалоба является то, что, если я ставлю это в цикле, все изображения в массиве будет то же самое - они будут последними изображение, поступающее. Кажется, это выражение «ROMS [0] .Game.Art.Screen.Source = Image_0;» связывает ROMS [0] .Game.Art.Screen.Source с переменной Image_0, вместо того, чтобы просто передавать значение (это кажется мне удивительным поведением, но не стоит беспокоиться). Так что для того, чтобы продолжать заполнять ROMS [j] .Game.Art.Screen.Source, мне нужно создать массив BitmapImages отдельно от массива ROM в качестве ссылки. То, что я бы предпочел, чтобы создавать экземпляры BitmapImages в массиве, как это (?):
ROMS[0].Game.Art.Screen.Source = new BitmapImage();
InitializeComponent();
ROMS[0].Game.Art.Screen.Source.BeginInit();
ROMS[0].Game.Art.Screen.Source.UriSource = new Uri(@"E:\Arcade\Art\Box\Intellivision\Congo Bongo.jpg", UriKind.Absolute);
ROMS[0].Game.Art.Screen.Source.EndInit();
Это не работает. Rom.Game.Art.Screen.Source не является BitMapImage, и я не могу найти методы для назначения ему изображения.
Так что мои вопросы, в частности: 1. Есть ли способ назначить источник изображения ROMS [0] .Game.Art.Screen.Source без создания отдельного BitmapImage, который живет отдельно или это глупо?
Есть ли более разумный способ сделать то, что я пытаюсь сделать?
Есть ли ссылка, чтобы помочь мне понять отношения между бесчисленными классами изображений в C#?
Извините за многословный вопрос и спасибо.
Спасибо, что посмотрели на это. Это был именно тот ответ, на который я надеялся, но это не похоже, что у класса Image есть свойство Path. –
Вам не нужно использовать конвертер. Поверьте, вы должны привыкнуть к использованию конвертации, если хотите быть хорошим с xaml: Посмотрите эту тему, и это сэкономит вам жизнь: http://stackoverflow.com/questions/14355489/bind- image-source-in-wpf-to-url –
Хороший лорд. Я могу просто привязать его к строке, и она автоматически преобразует ее. Вся эта чушь с BitmapImages.Uri.Source.Jibberjabber.blahblahblah прокомментирована. –