powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / состояние дочернего компонента blazor
3 сообщений из 3, страница 1 из 1
состояние дочернего компонента blazor
    #40012372
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте! У меня один родительский компонент и два дочерних. Родительский компонент принимает из сервиса объект типа IEnumerable<ViewGoodsStocksMvc> objGoods;
. Дочерний компонент принимает из родительского компонента модифицированное множество [Parameter] public IEnumerable<TypeFiltered> TypeList { get; set; }, которое получается путем преобразования вышеуказанного objGoods.
Далее этот TypeList раскладывается на чекбоксы , на которые пользователь должен кликать, чтобы фильтровать тот самый основной объект objGoods. Все вроде получается , но после фильтрации objGoods, дочерний объект так де обновляется и чекбоксы , которые пользователь не отметил, изчезают. Я думал, что надо где-то копировать List по значениям, но что то затупил , не пойму , где это делать, какой способ лучше использовать?
Вот код Родителя
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
@code {
   

    #region вызов из сервиса objGoods к-т GoodStock
    protected override async Task OnInitializedAsync()
    {
        // запускаем без ожидания, для отзывчивости UI
        await InitAsync();
    }
    IEnumerable<ViewGoodsStocksMvc> objGoods;
  
    private async Task InitAsync()
    {
        objGoods = await objGoodStockService.GetGoodsAsync(radioItem);
        await InvokeAsync(StateHasChanged);

    }

  
    #endregion
    #region для к-та группа типов RadioGender
    string radioItem = "1";
    //private string checkChanged;
    private void CheckChanged(ChangeEventArgs e)
    {
        radioItem = e.Value.ToString();
        InitAsync();

    }
    #endregion
    #region для к-та выбор типа  SelectTypes
    public IEnumerable<TypeFiltered> GetTypeList() =>
          objGoods.Select(t => new TypeFiltered { TypeId = t.TypeId, Type = t.Type })
          .GroupBy(x => x.TypeId)
          .Select(x => x.First());
    private void ShowSizes(HashSet<int> typeidlist)
    {
      
        objGoods = objGoods.Join(typeidlist, p => p.TypeId, z => z, (p, z) => p).ToList();
    }
    #endregion



}


ShowSizes - это метод , в который приходит параметр из дочернего компонента.
Вот код первой дочки с чекбоксами.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
[Parameter]
    public IEnumerable<TypeFiltered> TypeList { get; set; }
   
    [Parameter]
    public EventCallback<HashSet<int>> OnChangeCallBack { get; set; }
    public HashSet<int> TypeIdList = new HashSet<int>();


    void OnChange(int typeID, object checkedValue)
    {

        if ((bool)checkedValue)
        {
            if (!TypeIdList.Contains(typeID))
            {
                TypeIdList.Add(typeID);
            }

        }
        else
        {
            if (TypeIdList.Contains(typeID))
            {
                TypeIdList.Remove(typeID);
            }

        }
       
    }

}


Метод отправляет фильтрованный objGoods во вторую дочку , где пользователь видит отфильтрованные товары.
Надо , чтобы все чекбоксы в первой дочке остались, что бы пользователь мог дальше ими играть и менять фильтры.
Может есть способ, что бы дочерний компонент не обновлялся?
Простите за мой уровень знаний.
...
Рейтинг: 0 / 0
состояние дочернего компонента blazor
    #40012379
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jeanssp
Код: c#
1.
2.
3.
4.
    public IEnumerable<TypeFiltered> GetTypeList() =>
          objGoods.Select(t => new TypeFiltered { TypeId = t.TypeId, Type = t.Type })
          .GroupBy(x => x.TypeId)
          .Select(x => x.First());

Кода мало, описание задачи непонятное, поэтому пальцем в небо: здесь нужен ToList
...
Рейтинг: 0 / 0
состояние дочернего компонента blazor
    #40012812
jeanssp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Точно, я неполностью скопировал код дочки, последний вызов метода OnChangeCallBack.InvokeAsync(TypeIdList);не включил.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 [Parameter]
    public IEnumerable<TypeFiltered> TypeList { get; set; }
   
    [Parameter]
    public EventCallback<HashSet<int>> OnChangeCallBack { get; set; }
    public HashSet<int> TypeIdList = new HashSet<int>();


    void OnChange(int typeID, object checkedValue)
    {

        if ((bool)checkedValue)
        {
            if (!TypeIdList.Contains(typeID))
            {
                TypeIdList.Add(typeID);
            }

        }
        else
        {
            if (TypeIdList.Contains(typeID))
            {
                TypeIdList.Remove(typeID);
            }

        }
      
        
        OnChangeCallBack.InvokeAsync(TypeIdList);

    }


Этот вызов приходит в родитель сюда
Код: html
1.
<SelectTypes TypeList="GetTypeList()" OnChangeCallBack="@ShowSizes" />


и вот этот метод в родителе
Код: c#
1.
2.
3.
4.
private void ShowSizes(HashSet<int> typeidlist)
    {
        objGoods = objGoods.Join(typeidlist, p => p.TypeId, z => z, (p, z) => p).ToList();
    }



objGoods фильтруется, из него образуется TypeList, который формирует чекбоксы .
Ладно , оставлю пока эту проблему, сделаю все на кнопках. Спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / состояние дочернего компонента blazor
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]