WPF не работает SelectedItem DataGrid в RowDetailsTemplate

261
24 декабря 2017, 06:32

Есть DataGrid и в его RowDetailsTemplate еще один DataGrid

<DataGrid
    AutoGenerateColumns="False"
    ItemsSource="{Binding VerstatOperators}"
    SelectedItem="{Binding SelectedVerstatOperator}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding FullName}" Header="ПИБ" />
    </DataGrid.Columns>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid
                AutoGenerateColumns="False"
                ItemsSource="{Binding Marks}"
                SelectedItem="{Binding SelectedMark}">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Time}" Header="Время, мин" />
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

Его ViewModel

private IEnumerable<VerstatOperator> verstatOperators;
public IEnumerable<VerstatOperator> VerstatOperators
{
    get { return verstatOperators; }
    set
    {
        verstatOperators = value;
        OnPropertyChanged("VerstatOperators");
    }
}

private VerstatOperator selectedVerstatOperator;
public VerstatOperator SelectedVerstatOperator
{
    get { return selectedVerstatOperator; }
    set
    {
        selectedVerstatOperator = value;
        try
        {
            Marks = db.Marks.Where(x =>
                x.IdVerstatOperator == SelectedVerstatOperator.IdVerstatOperator).ToList();
        }
        catch { }
        OnPropertyChanged("SelectedVerstatOperator");
    }
}

private List<Mark> marks;
public List<Mark> Marks
{
    get { return marks; }
    set
    {
        marks = value;
        OnPropertyChanged("Marks");
    }
}

private Mark selectedMark;
public Mark SelectedMark
{
    get { return selectedMark; }
    set
    {
        selectedMark = value;
        OnPropertyChanged("SelectedMark");
    }
}

Все работает кроме SelectedMark, выбирая любую строку из грида в деталях он просто не содержит объекта и всегда остаеться null.

Я так понимаю из-за вложенности этот грид имеет какое-то ограничение, как все-таки отлавливать выбранный элемент по MVVM канону

Answer 1

Решил проблему таким способом

SelectedItem="{Binding Path=DataContext.SelectedMark, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
READ ALSO
Заменить список в коде на список в файле

Заменить список в коде на список в файле

Подскажите пожалуйста, как эту часть кода заменить, что бы список слов не вписывать ручками в коде, а записывались бы в список из файлаtxt

223
Консоль и SetCursorPosition C#

Консоль и SetCursorPosition C#

Доброго времени сутокДелаю лабораторную работу по программированию (вопрос не о методе решения) и возникла проблема с консолью

232
Определить следующие 6 месяцев

Определить следующие 6 месяцев

Как можно при помощи momentjs определить следующие 6 месяцев? Например, сегодня 12 месяц по счёту и я бы хотел на выходе получить массив:

286