Я новичок в WPF. У меня есть listBox с различными элементами графического элемента в нем. Элемент в спискеBox связан со списком.C# listBox с различными элементами, привязанными к списку строк
На данный момент, чтобы добавить элементы, которые я делаю это старый способ, который с нет привязки:
StackPanel sp = new StackPanel();
string currentDir = AppDomain.CurrentDomain.BaseDirectory.ToString();
TextBox tb = new TextBox()
{
Text = strContent,
BorderBrush = new SolidColorBrush(Colors.Gainsboro),
IsReadOnly = true,
ToolTip = strNotes,
FontSize = 12,
FontWeight = FontWeights.Bold,
Width = IMAGES_ROW_HEIGHT,
Height = IMAGES_ROW_HEIGHT/GOLDEN_RATIO,
Background = null,
Margin = new Thickness(BUTTON_MARGIN),
VerticalContentAlignment = VerticalAlignment.Center,
HorizontalContentAlignment = HorizontalAlignment.Center
};
sp.Children.Add(tb);
Image newResizedImage = ImageUtilities.StrPath2ResizedImageSizeHeight(strPathImage, IMAGES_ROW_HEIGHT);
if (newResizedImage != null)
{
sp.Children.Add(newResizedImage);
sp.Orientation = Orientation.Horizontal;
sp.HorizontalAlignment = HorizontalAlignment.Left;
}
lbxPPgroups.Items.Add(sp);
lbxPPgroups.SelectedIndex = 0;
var newGroup = new PcDmisData.Group();
newGroup.Description = strContent;
var newImage = new PcDmisData.MyImage();
newImage.Image = newResizedImage;
newImage.IsImageEmbedded = false;
newGroup.myImage = newImage;
newGroup.Notes = strNotes;
easyRunData.olstPPgroups.Add(newGroup);
, но я знаю, что я делаю это неправильно, потому что я буду иметь вручную обрабатывать удаление, добавлять, изменять порядок элементов и т. д. Я хотел бы иметь возможность связать элементы в ListBox к элементам следующего класса:
[Serializable]
public class EasyRunXmlSerializableData
{
public EasyRunXmlSerializableData()
{ }
//PcDmis Data
public ObservableCollection<PcDmisData.Group> olstPPgroups = new ObservableCollection<PcDmisData.Group>();
}
с
public class PcDmisData
{
[Serializable]
public class Group
{
public string Description;<---------this for the text of the textbox
public MyImage myImage;<------------this is the image
public string Notes;<---------------this for a tooltip
public ObservableCollection<PartProgram> partProgramList = new ObservableCollection<PartProgram>();
}
[Serializable]
public class MyImage
{
public object Image;
public bool IsImageEmbedded;
}
....
Thanx за любую помощь Патрик
Как спросил, вопрос слишком широк. Краткая версия состоит в том, что вам нужно узнать о шаблонах данных, создать класс модели представления, содержащий данные, которые будут контролировать визуальный внешний вид элемента списка, а затем в XAML объявить «DataTemplate» для вашего типа (типа) которые связываются с соответствующими свойствами в классе модели представления и представляют желаемый внешний вид в соответствии со значениями в этих свойствах. –