Проблема с комбо-бокс-столбцами таблицы

231
05 августа 2018, 21:10

В таблице есть две колонки, обе они имеют тип DataGridComboBoxColumn. В первой колонке надо показывать выпадающий список из одной коллекции, во второй колонке выпадающий список должен заполняться на основе перечисления (Enum).

К таблице привязана коллекция SortLevels объектов типа SortLevel, свойства которых должны меняться через выпадающие списки.

Пытался по разному описывать привязку данных в комбо-боксы, не получается ничего, выводятся пустые выпадающие списки. В результате нужно иметь сформированную коллекцию SortLevels, объекты в которой редактируются через комбо-боксы.

Объект строки таблицы:

public class SortLevel
{
    public GridColumn Column { get; set; }
    public SortOrder Order { get; set; }
}

Описание колонки:

public class GridColumn
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Перечисление типа сортировки:

public enum SortOrder
{
    ASC,
    DESC
}

Разметка XAML:

<Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0" Orientation="Horizontal">
            <Button Command="{Binding AddSortLevelCommand}" Content="+ level" />
            <Button Command="{Binding RemoveSortLevelCommand}" Content="- level" />
        </StackPanel>
        <DataGrid
            Grid.Row="1"
            AutoGenerateColumns="False"
            CanUserAddRows="False"
            CanUserDeleteRows="False"
            CanUserSortColumns="False"
            ItemsSource="{Binding SortLevels}"
            SelectedItem="{Binding SelectedSortLevel}">
            <DataGrid.Columns>
                <DataGridComboBoxColumn
                    Width="*"
                    DisplayMemberPath="Name"
                    Header="Column"
                    ItemsSource="{Binding Columns}"
                    SelectedValuePath="Id" />
                <DataGridComboBoxColumn
                    Width="*"
                    Header="Order"
                    ItemsSource="{Binding SortOrder}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

Код ВМ:

public class MainViewModel : ViewModelBase
{
    public ObservableCollection<GridColumn> Columns { get; set; }
    public ObservableCollection<SortLevel> SortLevels { get; set; }
    private SortLevel selectedSortLevel;
    public SortLevel SelectedSortLevel
    {
        get { return selectedSortLevel; }
        set
        {
            if (Set(ref selectedSortLevel, value) == true)
            {
                RemoveSortLevelCommand.RaiseCanExecuteChanged();
            }
        }
    }
    public RelayCommand AddSortLevelCommand { get; private set; }
    public RelayCommand RemoveSortLevelCommand { get; private set; }
    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {
        Columns = new ObservableCollection<GridColumn>()
        {
            new GridColumn() { Id = 0, Name = "0"},
            new GridColumn() { Id = 1, Name = "1"},
            new GridColumn() { Id = 2, Name = "2"},
            new GridColumn() { Id = 3, Name = "3"},
        };
        SortLevels = new ObservableCollection<SortLevel>();
        AddSortLevelCommand = new RelayCommand(AddSortLevel);
        RemoveSortLevelCommand = new RelayCommand(RemoveSortLevel, CanRemoveSortLevel);
    }
    private void AddSortLevel()
    {
        var sortLevel = new SortLevel()
        {
            Order = SortOrder.ASC,
            Column = Columns.First()
        };
        SortLevels.Add(sortLevel);
    }
    private void RemoveSortLevel()
    {
        SortLevels.Remove(SelectedSortLevel);
    }
    private bool CanRemoveSortLevel()
    {
        return SelectedSortLevel != null;
    }
}
READ ALSO
Передача данных в DataGrid

Передача данных в DataGrid

День добрыйИмитирую регистрацию пользователя

221
Защита данных программы

Защита данных программы

Необходимо защитить данные которые используются и генерируются программой в процессе работыЕсть идея использовать запароленную базу данных...

248
Метод для запроса информации из базы на C#

Метод для запроса информации из базы на C#

Есть у меня программа, которой я могу подключаться к БД SQL, запускать процедуру на SQL сервере с параметрами, и получать ответОтвет это обычно...

262
System.ValueType[*,*,*] to byte[*,*,*]

System.ValueType[*,*,*] to byte[*,*,*]

Изначально это был тип array<System::ValueType^, 3>, в массиве содержатся данные картинки(грабятся с камеры), этот плагин написан на с++при передаче...

213