2015-11-22 2 views
0

Я новичок в WPF. У меня есть listBox с различными элементами графического элемента в нем. Элемент в спискеBox связан со списком.C# listBox с различными элементами, привязанными к списку строк

enter image description here

На данный момент, чтобы добавить элементы, которые я делаю это старый способ, который с нет привязки:

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 за любую помощь Патрик

+1

Как спросил, вопрос слишком широк. Краткая версия состоит в том, что вам нужно узнать о шаблонах данных, создать класс модели представления, содержащий данные, которые будут контролировать визуальный внешний вид элемента списка, а затем в XAML объявить «DataTemplate» для вашего типа (типа) которые связываются с соответствующими свойствами в классе модели представления и представляют желаемый внешний вид в соответствии со значениями в этих свойствах. –

ответ

1

Эти ссылки должны вы начнете в правильном направлении.

Вам необходимо понять DataTemplate и привязку данных для вашего текущего сценария.

MSDN : How to display data in a ListBox

ListBox tutorial basics

ListBox Custom Layout

How to get a ListBoxItem from a data bound ListBox

DataBinding Ссылки

DataBinding - How to

DataBinding - FAQ

Scott's DataBinding tutorial