ich habe diese benutzerdefinierte Listbox, die ich mit Microsoft Expression Blend erstellt, die drei Elemente (ein Bild, einen Namen und einen Text) enthält .. und das ist die Code der ListBox Vorlage !!wie ein neues Element in einer benutzerdefinierten Listbox programmgesteuert mit C#
<DataTemplate x:Key="ListBoxTemplate">
<Grid Width="320" Height="80" Background="#FFCAE5DE">
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Path Grid.ColumnSpan="1" Data="M8.4999981,6.8212103E-13 L256.5,6.8212103E-13 C261.19443,-1.8775456E-06 265,3.8055778 265,8.4999981 L265,55.499998 C265,60.194418 261.19443,63.999998 256.5,63.999998 L52.689537,63.999998 52.702888,75.988852 45.902157,63.999998 8.4999981,63.999998 C3.8055797,63.999998 0,60.194418 0,55.499998 L0,8.4999981 C0,3.8055778 3.8055797,-1.8775456E-06 8.4999981,6.8212103E-13 z"
Fill="#FF3E977D" Height="Auto" Margin="5,5,8,-11" StrokeStartLineCap="Round" Stretch="Fill" StrokeEndLineCap="Round" StrokeDashCap="Round" Stroke="Black" StrokeThickness="0"
StrokeLineJoin="Round" VerticalAlignment="Stretch" Grid.Column="1" Opacity="0.535" />
<Border Margin="10,5,0,-2" BorderBrush="Black" BorderThickness="1" Height="Auto" CornerRadius="4">
<Image Source="{Binding Path=ImageURL}" Stretch="Fill" Width="Auto" Height="Auto" />
</Border>
<StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold" Height="Auto" Width="Auto" Grid.Column="1" Margin="5,5,0,-11">
<TextBlock Text="{Binding Path=Text}" Width="400" Margin="3,2,0,16" Height="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" TextAlignment="Justify" TextWrapping="Wrap" ScrollViewer.HorizontalScrollBarVisibility="Auto"/>
</StackPanel>
<StackPanel Margin="0,47,43.5,-51" Grid.Column="1" Height="Auto" HorizontalAlignment="Stretch" Width="Auto" Grid.Row="1">
<TextBlock Text="{Binding Path=Name}" Height="20" Margin="60,20,8,0" Width="Auto"/>
</StackPanel>
</Grid>
</DataTemplate>
wie Sie sehen können, ich habe drei Bindungen (ImageURL, Text und Namen). Nun möchte ich eine Methode in C# implementieren, die es mir erlaubt, ein neues Element in dieser Listbox hinzuzufügen. Und als erstes habe ich ein paar Beispiele gefunden, wie ich lisboxitem mit C# hinzufügen kann, aber ich weiß nicht, wie ich es mit meiner angepassten Listbox anwenden soll ... die Methode in C# war so etwas!
private ListBoxItem AddItem(string imageUrl, string text, string name)
{
ListBoxItem item = new ListBoxItem();
/* the
code
of
the
customized
ListBox */
item.content = content;
return item;
}
ist die Frage, wie kann ich ein neues Element in dem angepassten Listenfeld hinzufügen, wenn ich die Methode AddItem(imageUrl, text, name)
nennen?
Alle Ideen .. Jede Hilfe wäre mehr als geschätzt.
@Margnus Johnansson vielen Dank für die Lösung. aber immer noch ein problem .. was wenn ich mehrere einzelteile hinzufügen möchte, was soll ich tun? !! diese ist die Methode, die ich realisiert habe ..
public void Additem(string imageUrl, string text, string name)
{
ObservableCollection<Person> Items = new ObservableCollection<Person>();
MyListBox.ItemsSource = Items;
Items.Add(new Person() { Image = imageUrl, Text = text, Names = name });
}
diese Methode nur ein Element hinzufügt, selbst wenn ich es nennen mehrere Male, aber mein Ding ist, dass ich ein neues Element in der List i jedes Mal hinzufügen möchten Rufen Sie die Methode
Additem(string imageUrl, string, text, string name)
ohne die anderen Elemente zu überschreiben !!
danke für das Verständnis.
Sie sollten in Ihrer Add-Methode keine ObservableCollection erstellen. Setzen Sie das globale zum Beispiel auf die Page/Window im Konstruktor. Aus diesem Grund sehen Sie das beschriebene Problem, da Sie es jedes Mal zurücksetzen und löschen, wenn Sie ein Element hinzufügen. Während Sie dabei sind, verschieben Sie auch die Zuordnung MyListBox.ItemsSource nach draußen (zum Beispiel in Ihrem Konstruktor oder Seite laden) –
Problem gelöst dank Ihnen! – Iyad009