Строка DataGrid и MVVM - PullRequest
       21

Строка DataGrid и MVVM

0 голосов
/ 18 мая 2010

У меня есть таблица данных wpf со многими строками, каждая строка имеет определенные особенности поведения, такие как выбор, измененный в комбинированном столбце 1, отфильтрует комбинированный столбец 2, а то, что выбрано в комбинированном столбце 1 строки 1, нельзя выбрать в комбинированном столбце строки 1 столбца 1 и т.д ...

Так что я думаю о том, чтобы иметь модель представления для основной сетки данных и другую для каждой строки.

Это хорошая реализация MVVM? Это так, что я могу эффективно обрабатывать событие изменения каждой строки.

Вопрос в том, как создать «каждую строку» в качестве пользовательского элемента управления? в пределах сетки данных.

Я хочу реализовать что-то вроде этого:

        <TreeView
        Padding="0,4,12,0">

        <controls:CommandTreeViewItem
            Header="Sales Orders"
            Command="{Binding SelectViewModelCommand}"
            CommandParameter="Sales Orders"/>          

    </TreeView>  

Где вместо TreeView я хочу сетку данных, а вместо элементов управления: CommandTreeViewItem строка сетки данных в WPF.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 18 мая 2010
        <my:DataGrid x:Name="locationGrid">
            <my:DataGrid.Columns>
                <my:DataGridTemplateColumn>
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=LocationName}"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                    <my:DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                            <TextBox Text="{Binding Path=LocationName}"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellEditingTemplate>
                </my:DataGridTemplateColumn>
            </my:DataGrid.Columns>
        </my:DataGrid>    

Вы можете поместить в каждый столбец DataGrid практически все, что захотите. Я привел вам пример здесь. Вы можете определить даже шаблон заголовка. Если вы делаете небольшую программу, в MVVM нет необходимости, но я вас не очень хорошо понимаю, зачем вам MV для DataGridRow? Сделайте UserControl и вставьте его в DataTemplate, а для UserControl создайте класс VM.

0 голосов
/ 25 октября 2011

Просто создайте наблюдаемую коллекцию вашего класса модели представления в открытом свойстве в viewModel для вашего представления. Вот пример

public ObservableCollection<YourViewModelForEachRow> LineItems{ get; private set; }

Затем, по вашему мнению, сетка данных xaml установит для свойства ItemsSource свойство LineItems, которое вы создали выше.

ItemSource="{Binding LineItems"}

Это, конечно, предполагает, что DataContext для представления, содержащего DataGrid, был установлен в ViewModel, где вы создали LineItems. Я делаю это для моих взглядов. Я все еще считаю себя новичком в WPF, но это, кажется, очень чистый и гибкий подход к MVVM. Вся логика обработки ввода данных, обработки виджетов и т. Д. В каждой строке обеспечивается моделью представления строк.

Плюс твой xaml очень чистый. Типичное определение столбца для меня выглядит следующим образом (где LineItemNumber является открытым свойством в моей LineItemViewModel):

<DataGridTextColumn Binding="{Binding Path=LineItemNumber, StringFormat=000}"
                              ElementStyle="{StaticResource CellRightAlign}"
                              Header="Line No." />
0 голосов
/ 18 мая 2010

Вы можете использовать DataTemplate для каждой строки и настраивать ее так, как вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...