Почему я получаю исключение System.InvalidOperationException? - PullRequest
0 голосов
/ 29 мая 2018

Я действительно в отчаянии в данный момент.Я программирую WPF-программу.Я построил простую XAML-construct и сгенерировал сетки и метки в сетках динамически, основываясь на том, сколько элементов хранится в базе данных.Несмотря на то, что я определил метку и назвал ее меткой, я получаю System.InvalidOperationException.Я нашел это решение здесь .Моя настоящая проблема заключалась в том, что мне нужно было получить содержимое метки в этой сетке.Я сделал все похожее на вопрос, который я связал.

Надеюсь, вы понимаете, о чем я.

Вот мой код:

for (int i = 0; i < numberOfBooks; i++)
{
    Grid grid = new Grid();
    RowDefinition row = new RowDefinition();

    ColumnDefinition column = new ColumnDefinition();
    ColumnDefinition column2 = new ColumnDefinition();
    ColumnDefinition column3 = new ColumnDefinition();

    Label label = new Label();
    label.Content = Books[i].Titel;

    upperGrid.RowDefinitions.Add(row);
    grid.ColumnDefinitions.Add(column);
    grid.ColumnDefinitions.Add(column2);
    grid.ColumnDefinitions.Add(column3);

    Grid.SetRow(label, i);
    Grid.SetColumn(label, 0);
    Grid.SetRow(grid, i);
    upperGrid.Children.Add(grid);
    grid.Children.Add(label);

    grid.MouseLeftButtonDown += (sen, evg) =>
    {
        Label lbl = grid.Children.OfType<Label>().First(k => k.Name=="label"); //Here I get the exception
        string result = lbl.Name.ToString();
        Console.WriteLine(result);
    }; 
}

1 Ответ

0 голосов
/ 29 мая 2018

Первый бросит.Используйте FirstOrDefault, который возвратит default<T>, а также нулевой условный оператор (?.):

Label lbl = grid.Children.OfType<Label>().FirstOrDefault(k => k.Name=="label");
string result = lbl?.Name.ToString();
Console.WriteLine(result);

Однако, поскольку этоВ проекте WPF я предлагаю использовать MessageBox или что-то подобное, чтобы показать результат, вместо Console.WriteLine, например:

Сначала добавьте это в свои директивы using:

using System.Windows; 

А потом:

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