Каков самый простой способ заполнить поле списка с помощью списка. И как бы вы обнаружили, что струна постукивалась?

    List<HistoryEntry> urls = new List<HistoryEntry>();
    public HistoryEntry selectedHistory;

public MainPage()
        {
            InitializeComponent();
        }



 void Browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        // Save for fast resume
        _deactivatedURL = e.Uri;
        // We have arrived at a new page, 
        // hide the progress indicator
        _progressIndicator.IsVisible = false;
        textBox1.Text = Convert.ToString(e.Uri).Remove(0, 11);
        getHistory(textBox1.Text);
    }

private void getHistory(string url)
    {
        HistoryEntry urlObj = new HistoryEntry();
        urlObj.url = url;
        urlObj.timestamp = DateTime.Now.ToString("HH:mm yyyy-MM-dd");
        urls.Add(urlObj);

        listBox.ItemsSource = urls;
    }

    private void ListBox_SelectionChanged(object sender, GestureEventArgs e)
    {
        selectedHistory = listBox.SelectedValue as HistoryEntry;
        browserSearch(selectedHistory.url);
    }


<Grid>
                <ListBox x:Name="listBox" ItemsSource="{Binding urls}" Tap="ListBox_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>

                            <StackPanel Orientation="Horizontal">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="auto"></ColumnDefinition>
                                        <ColumnDefinition></ColumnDefinition>
                                    </Grid.ColumnDefinitions>
                                    <StackPanel Grid.Column="1" Orientation="Vertical" Margin="0,0,0,29" >
                                        <TextBlock Text="{Binding timestamp}" FontSize="15" ></TextBlock>
                                        <TextBlock Text="{Binding url}" FontSize="25" ></TextBlock>
                                    </StackPanel>
                                </Grid>
                            </StackPanel>

                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>

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

Заранее спасибо :)

Если вам нужны какие-то подробности, прокомментируйте, и я с радостью объясню более подробно :)

0
user3795349 21 Июл 2014 в 17:27

5 ответов

Лучший ответ
  List<HistoryEntry> urls = new List<HistoryEntry>();
        public MainPage()
        {
            InitializeComponent();
        }

        private void WebBrowser_Navigated(object sender, NavigationEventArgs e)
        {
             string url  = Convert.ToString(e.Uri).Remove(0, 11);
             HistoryEntry urlObj = new HistoryEntry();
             urlObj.URL = url;
             urlObj.timestamp = DateTime.Now.ToString("HH:mm yyyy-MM-dd");
             urls.Add(urlObj);
             listBox.ItemsSource  = null;
             listBox.ItemsSource = urls;
        }

        public  class HistoryEntry
        {
            public string URL { get; set; }
            public string timestamp { get; set; }

        }
2
Sajeetharan 21 Июл 2014 в 21:40
Он по-прежнему не печатает никаких значений из списка
 – 
user3795349
21 Июл 2014 в 17:56
Вы установили listBox.ItemsSource = urls;
 – 
Sajeetharan
21 Июл 2014 в 17:56
Да, сейчас, а также, если бы я хотел показать отметку времени или дополнительные детали, как бы я это добавил. Мне создать второй список для этого или?
 – 
user3795349
21 Июл 2014 в 17:59
Не нужно создавать отдельный список, просто используйте класс, который я упомянул выше.
 – 
Sajeetharan
21 Июл 2014 в 17:59
Хорошо, теперь я создал класс, как мне добавить значения в MainPage, а затем привязать к списку
 – 
user3795349
21 Июл 2014 в 18:01

Попробуй это!

private void WebBrowser_Navigated(object sender, NavigationEventArgs e)
        {
             string url  = Convert.ToString(e.Uri).Remove(0, 11);
             HistoryEntry urlObj = new HistoryEntry();
             urlObj.URL = url;
             urlObj.timestamp = DateTime.Now.ToString("HH:mm yyyy-MM-dd");
             urls.Add(urlObj);
             listBox.ItemsSource  = null;
             listBox.ItemsSource = urls;
        }
1
typhoon12345 26 Окт 2014 в 12:33

Обязательно добавьте это в XAML

<StackPanel x:Name="stack">
        <ListBox x:Name="lst">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Str}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Content="Add new Runtime" Click="Button_Click"></Button>
    </StackPanel>
1
typhoon12345 26 Окт 2014 в 12:38

Сделайте это в коде, если вы не хотите создавать объекты

List<string> myList = new List<string>();

//fill your list here

foreach (string sItem in myList)
{
    ListBox1.Items.Add(sItem)
}
0
djack109 21 Июл 2014 в 17:41

Попробуй это:

XAML:

    <StackPanel x:Name="stack">
        <ListBox x:Name="lst">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Str}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Content="Add new Runtime" Click="Button_Click"></Button>
    </StackPanel>

CS:

    Define Global `ObservableCollection<Data> obj;`

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        obj = new ObservableCollection<Data>();
        obj.Add(new Data("string1"));
        obj.Add(new Data("string2"));
        obj.Add(new Data("string3"));
        obj.Add(new Data("string4"));
        lst.ItemsSource = obj;
    }

    //For adding new values to the list, must be seen in the listbox
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        obj.Add(new Data("New Item"));
    }

public class Data
        {
            public string Str { get; set; }

            public Data() { }

            public Data(string Str)
            {
                this.Str = Str;
            }
        }
0
Amit Bhatiya 21 Июл 2014 в 17:52