Как отобразить изменения переменной из класса, который находится в отдельном файле C#

Сразу скажу, что я новичок и пытаюсь разобраться, только что-то не получается.

У меня есть класс Util в котором сборная солянка. В нём есть переменная списка и функции для модификации этой переменной. При открытии определённого окна, в ListView отображается список из этой переменной. Далее, я добавляю новую запись в БД, а после обновляю переменную, в которой уже отображается список с новой записью.

В базу всё добавляется, список обновляется. Как мне после закрытия окна добавления записи обновить ListView родительского окна?

Возможно, решение в Binding и интерфейсе INotifyPropertyChanged, в которых я благополучно не могу разобраться очень долгое время. Напомню, что класс находится в отдельном файле. Я могу объединить ListView с классом, который прописан в cs файле этого окна, но те данные, которые мне приходится отображать модифицируются с помощью другого окна (не напрямую, а с помощью обновления (повторный запрос к БД)).

Как можно реализовать это проще и как в дальнейшем сделать это правильно?

Для примера:

Это обозреватель решений: введите сюда описание изображения

Это переменные класса Util и функции для их модификации.

private static List<string> razn_k = new List<string>();
private static List<string> razn_n = new List<string>();


public static void Set_razn()
{
    SqlCommand set1 = new SqlCommand(@"Select Kod, Nazv from Raznovidnosti_ingr where Kod_ingr = " + Get_kod_i(), conK);
SqlDataReader dr1 = set1.ExecuteReader();
    while (dr1.Read())
    {
        int k; string n;
        k = dr1.GetInt32(0);
        n = dr1.GetString(1);
        razn_k.Add(k.ToString()); 
        razn_n.Add(n);
    }
    dr1.Close();
}

public static List<string> Get_razn_k()
{
    return razn_k;
}

public static List<string> Get_razn_n()
{
    return razn_n;
}

public static void Clear_razn()
{
    razn_k.Clear();
    razn_n.Clear();
}

введите сюда описание изображения

Спасибо за любую помощь!


Ответы (1 шт):

Автор решения: A B

В общем: 1)Я поменяла List на ObservableCollection; private static ObservableCollection razn_n = new ObservableCollection();

public static ObservableCollection<string> Razn_n
    {
        get
        {
            return razn_n;
        }
    }
     public static void Set_razn()
     {
         SqlCommand set1 = new SqlCommand(@"Select Kod, Nazv from Raznovidnosti_ingr where Kod_ingr = " + Get_kod_i(), conK);
     SqlDataReader dr1 = set1.ExecuteReader();
         while (dr1.Read())
         {
             string n;
             n = dr1.GetString(1);
             razn_n.Add(n);
         }
         dr1.Close();
    }
    public static void Clear_razn()
    {
        razn_k.Clear();
        razn_n.Clear();
    }

2)Сделала свойство для переменной(поля) get, которое возвращает значение;

public static ObservableCollection<string> Razn_n
{
    get
    {
        return razn_n;
    }
}

3)Добавила пространство имён на форму, к которой нужна привязка, т.к. класс хранится в корне, а форма в папке;

xmlns:loc="clr-namespace:TestKafe"

4) Связала ListView к статическому свойству (если можно так сказать) с помощью Binding Path=(префикс:Класс.Свойство);

ItemsSource="{Binding Path=(loc:Util.Razn_n)}"

5) Установила у ListView Mode=OneWay.

ItemsSource="{Binding Path=(loc:Util.Razn_n), Mode=OneWay}"

Я начинаю потихонечку разбираться.

Спасибо всем, кто писал в комментариях! Вы ооочень помогли! Если у вас есть хорошие источники для обучения по данной теме, пожалуйста, дайте об этом знать!

→ Ссылка