Как я могу использовать элементы Listbox с WPF? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь выучить Wpf. Когда программа запускается, она выдает ошибку «Нет списка источника». Я работаю над дизайном Wpf, но я только начал.

Функции, которые я добавил в список извне, как я могу показать их как источники. Я понятия не имею об этом. Я думаю, что исследовал это в течение 2 часов, но я не нашел никакого ответа. У меня есть некоторые проблемы с Engli sh. Надеюсь, я не побеспокою вас. Все детали моих кодов ниже. Заранее спасибо за помощь.

//Note : My Class : (public partial class MainWindow : Window)
public void btnListAdd_Click(object sender, RoutedEventArgs e)
        {           
            CronList1.Items.Clear();     // ListBox      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
            OpenFileDialog f = new OpenFileDialog();

            if (f.ShowDialog().HasValue == true)
            {
                List<string> lines1 = new List<string>();
                using (StreamReader r = new StreamReader(f.OpenFile()))
                {

                    string line;
                    while ((line = r.ReadLine()) != null)
                    {

                        CronList1.Items.Add(line); // ListBox      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 


                    }
                }
            }
        }

2: Затем я пытаюсь прочитать все в CronList. Я запускаю метод в классе.

CronEvent cronEvent = new CronEvent();
Task.Run(cronEvent.Cron1);

3: Мой код не запускается!

public async Task Cron1()
        { 
            int sayix = 1;
            while (true)
            {
                try
                {

                 (HttpWebRequest) rq WebRequest.Create(mainWindow.CronList1.Items[sayix].ToString());
                    rq .Proxy = WebRequest.GetSystemWebProxy();
                    rq .AllowAutoRedirect = false;
                    rq .Timeout = 10000;

                    HttpWebResponse rply= (HttpWebResponse)rq.GetResponse();
                    StreamReader streamReader = new StreamReader(rply.GetResponseStream());
                    rply.Close();
                    streamReader.Close();

                    mainWindow.CronList1.SelectedIndex = sayix;

                    sayix++;
                    if (sayix == mainWindow.CronList1.Items.Count)
                    {
                        sayix = 0;
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }

                await Task.Delay(TimeSpan.FromSeconds(Convert.ToDouble(mainWindow.txtTime.Text)));

            }
        }

Код списка WPF

<ListBox Name="CronList1" Height="390" Margin="2,7,4,0" VerticalAlignment="Top" BorderBrush="Red" Cursor="Arrow" IsSynchronizedWithCurrentItem="False" BorderThickness="1" ClipToBounds="True" SnapsToDevicePixels="True" Grid.Row="1" Grid.RowSpan="2" Grid.Column="1">

                        <ListBox.ItemBindingGroup>
                            <BindingGroup/>
                        </ListBox.ItemBindingGroup>
                        <ListBox.Effect>
                            <hc:BrightnessEffect/>
                        </ListBox.Effect>


                    </ListBox>

1 Ответ

0 голосов
/ 26 марта 2020

Я бы рекомендовал использовать «привязку данных» в ViewModel, чтобы сделать код более читабельным.

Вы создаете класс (например, MainViewModel), и там вы создаете ObservableCollection, где вы добавляете или удаляете элементы из.

В представлении (файл xaml) вы затем добавляете эту модель представления в качестве источника и используете привязку для добавления элементов коллекции в ваш ListView.

Здесь пример

Дайте мне знать, если вы не можете заставить его работать.

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