как программно добавить новый элемент в настраиваемый список с помощью c # - PullRequest
1 голос
/ 25 марта 2012

У меня есть этот настраиваемый список, который я создал с помощью Microsoft Expression Blend, который содержит три элемента (изображение, имя и текст) ... и это код шаблона ListBox !!

<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>

Как видите, у меня есть три привязки (ImageURL, Текст и Имя).Теперь, что нужно сделать, это реализовать метод в C #, который позволяет мне добавить новый элемент в этом списке.И в начале я нашел несколько примеров для добавления lisboxitem с помощью c #, но я не знаю, как применить его с моим настраиваемым списком ... метод в c # был примерно таким!

private ListBoxItem AddItem(string imageUrl, string text, string name)
{ 
    ListBoxItem item = new ListBoxItem();
    /* the
       code
       of 
       the 
       customized
       ListBox */
     item.content = content;
     return item;
}

вопросявляется, как я могу добавить новый элемент в настраиваемый список, когда я вызываю метод AddItem(imageUrl, text, name)?

Любые идеи .. Любая помощь будет более чем признателен.

@Margnus Johnansson большое спасибо за решение.но все же есть одна проблема .. что если я хочу добавить несколько элементов, что мне делать? !!это метод, который я реализовал ..

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 });
    }

этот метод добавляет только один элемент, даже если я вызываю его несколько раз, но моя вещь заключается в том, что я хочу каждый раз добавлять новый элемент в списокя называю метод

Additem(string imageUrl, string, text, string name)

без перезаписи других элементов !!

спасибо за понимание.

1 Ответ

3 голосов
/ 25 марта 2012

Вы действительно должны взглянуть на Привязка данных , это очень поможет.

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

public class MyItem
{
  public string ImageUrl { get; set; }
  public string Text { get; set; }
  public string Name { get; set; }
}

и затем вы создаете привязываемую коллекцию этих элементов модели:

ObservableCollection<MyItem> Items{get;set;}

и привязываете свой ListView к этой коллекции:

Items = new ObservableCollection<MyItem>();
myListBox.ItemsSource = Items;

Наконец, вы можете добавить такие элементы:

Items.Add(new MyItem() { ImageUrl = "http://..", Text = "My Text", Name = "My Name" });

Из-за мощной привязки данных ListBox должен забрать изменения, которые вы внесли в коллекцию, и вы должны увидеть новый элемент в ListBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...