Avalonia DataGrid не принимает изменения от ComboBox

Рейтинг: 0Ответов: 0Опубликовано: 11.07.2023

Есть две таблички с данными:

  1. krn_list, содержащая два поля krn_list_id, code
  2. krn_list_value, содержащая 4 поля krn_list_value, krn_list_id(связывание по значению из первой таблички), code, value

Все что я делаю, это пытаюсь засунуть коды из первой таблички в ComboBox, чтобы их можно было выбрать, далее я ищу krn_list_id выбранного кода и пытаюсь достать все строки из второй таблицы с таким же krn_list_id и засунуть их в DataGrid. Очевидно, что при каждом новом выборе из ComboxBox DataGrid должен обновляться. Выглядит это так:

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

Я реализую приложение при помощи MVVM, а доступ к БД реализую с помощью entity framework. Данное окно вызывается из главного и называется AdminPanel. Структура проекта следующая:

Для этого окна я добавил свой ViewModel:

using System.Collections.ObjectModel;
using System.Linq;
using AvaloniaApplication3.Data;
using AvaloniaApplication3.Model;
using CommunityToolkit.Mvvm.ComponentModel;

namespace AvaloniaScantrak.ViewModels;

public partial class AdminPanelViewModel : ObservableObject
{
    [ObservableProperty]
    private ObservableCollection<string>? _parameterSettings = new ObservableCollection<string>{ };
    
    [ObservableProperty]
    private ObservableCollection<KrnListValue>? _parameters = new ObservableCollection<KrnListValue>{ };
    
    [ObservableProperty]
    private string? _selectedItemParameterSettings;
    
    [ObservableProperty]
    private int? _selectedItemParameterSettingsIndex=0;
    
    [ObservableProperty]
    private int? _selectedItemParameterSettingsId;
    
    public AdminPanelViewModel()
    {
        
        
        using DbscanVladContext db = new DbscanVladContext();
        var sett = db.KrnLists.ToList();
        // отображение основных параметров
        foreach (var u in sett)
        {
            if (u.Code != null) ParameterSettings?.Add(u.Code);
        }
        // отображение основных настроек
        Parameters = new ObservableCollection<KrnListValue>((from paramer in db.KrnListValues where paramer.KrnListId == (SelectedItemParameterSettingsIndex+1) select paramer).ToList());
    }
}

И во View разместил все элементы и настроил DataContext:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vm="using:AvaloniaScantrak.ViewModels"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="AvaloniaScantrak.AdminPanel"
        Title="AdminPanel"
        x:DataType="vm:AdminPanelViewModel">
    
    <Window.DataContext>
        <vm:AdminPanelViewModel></vm:AdminPanelViewModel>
    </Window.DataContext>
    
    <Grid Name="MainGrid" RowDefinitions="Auto *">
        <StackPanel Orientation="Horizontal">
            <Label Margin="0 5 10 0" Content="Вид параметров:"></Label>
            <ComboBox Width="200" Height="27"
                      Margin="0 5 0 0"
                      ItemsSource="{Binding ParameterSettings, Mode=TwoWay}"
                      SelectedItem="{Binding SelectedItemParameterSettings, Mode=TwoWay}"
                      SelectedIndex="{Binding SelectedItemParameterSettingsIndex, Mode=TwoWay}"
            />
        </StackPanel>
        <DataGrid Grid.Row="0" Margin="0 50 0 0" ItemsSource="{Binding Parameters, Mode=TwoWay}" 
                  AutoGenerateColumns="True" IsReadOnly="False" 
                  GridLinesVisibility="All"
                  BorderThickness="1" BorderBrush="Gray"
                  
        >
        </DataGrid>
    </Grid>
</Window>

Я сделал связывание combobox и datagrid идет через свойство Parameters, которое хранит в себе строки полученые из бд

 Parameters = new ObservableCollection<KrnListValue>((from paramer in db.KrnListValues where paramer.KrnListId == (SelectedItemParameterSettingsIndex+1) select paramer).ToList());

Как правильно сделать так, чтобы при выборе из ComboBox менялся и DataGrid? Я недавно ознакомился с MVVM, поэтому мог допустить где-то ошибку. Спасибо.

Ответы

Ответов пока нет.