Включение / отключение строки в сетке данных (шаблон MVVM)

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

silverlight,mvvm,

1

Ответов: 2


"за" 2 "за" принято

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

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


Используя событие 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...                        
        }
    }
}
Silverlight, MVVM,
Похожие вопросы