Включение / отключение строки в сетке данных (шаблон MVVM) - PullRequest
1 голос
/ 16 октября 2011

Существует сетка данных с n числом строк, первый столбец в таблице - это столбец CheckBox, теперь я хочу включить / отключить некоторые строки (чтобы пользователь не мог установить флажок) сетки данных в зависимости от некоторых значений.o Как это возможно с использованием шаблона MVVM.

Ответы [ 2 ]

2 голосов
/ 16 октября 2011

Вы, вероятно, связываете список (IEnumerable) объектов данных с вашей сеткой. Чтобы сохранить его красивым и чистым, вам нужно обернуть каждый из этих объектов данных другим объектом, назовем его RowViewModel . Затем этот RowViewModel может содержать дополнительные свойства, например, логическое значение, к которому можно привязать свойство IsEnabled вашего флажка, причем это логическое значение можно рассчитать из состояния объекта данных или даже из состояния модели родительского представления, если вы передадите ссылку на это к RowViewModel.

Вы также можете немного расширить это, чтобы элементы контекстного меню для каждой строки управлялись каждым RowViewModel и т. Д. Использование RowViewModel таким образом гарантирует, что вы сохраняете свой объект данных красивым и чистым, вы не загрязняете его какими-либо вещами это не нужно.

1 голос
/ 17 октября 2011

Используя событие LoadingRow для каждой строки, вы можете обновить элементы управления в любой ячейке по вашему желанию.Например,

private void MyDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
    MyDataObjectClass dataContext = (e.Row.DataContext as MyDataObjectClass);

    foreach (DataGridColumn col in from cols in MyDataGrid.Columns orderby cols.DisplayIndex select cols)
    {
        FrameworkElement fe = col.GetCellContent(e.Row);

        DataGridCell result = fe.Parent as DataGridCell;

        // as an example, find a template column w/o a sort member path
        if (col is DataGridTemplateColumn && col.SortMemberPath == null)
        {

            CheckBox button = VisualTreeExtensions.GetChildrenByType<CheckBox>(fe)[0];
            button.IsEnabled = true; // insert your data condition...                        
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...