Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Заполнение DataGrid и изменение свойств объектов


Автор: Storkur 12.4.2011, 13:55
Добрый день!

Есть коллекция с фигурами 
Код
 List<Shape> ShapesList = new List<Shape>();


1. Нужно выводить в табличном виде свойства одной, выбранной в данный момент фигуры. Вывод должен быть примерно как Properties визуальных компонентов в Visual Studio табличкой (пара: имя - значение). 
2. В этой табличке Properties необходимо изменять свойства выбранного объекта, в основном те которые относятся к визуальному виду (размер, тип заливки и т.д.)
3. Подходит ли для этого DataGrid?

В DataGrid получается добавить только всю коллекцию и то свойства каждого элемента отображаются в длиннющую строчку.
Код

ShapeProperties.ItemsSource = ShapesList;


Подскажите как реализовать, то что я написал в пунктах 1-3? 



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

Автор: likegift 12.4.2011, 18:40
Код

<DataGrid AutoGenerateColumns="False" Name="MainGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ItemsSource="{Binding ShapesList}" >
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="Параметр" Binding="{Binding Path=PropertyDescription,Mode=OneWay}" IsReadOnly="True" CanUserSort="False"  CanUserReorder="False" Width="150"/>
                                <DataGridTextColumn Header="Значение" Binding="{Binding Path=PropertyValue,Mode=OneWay}" IsReadOnly="True" CanUserSort="False" Width="*"/>
                            </DataGrid.Columns>
                        </DataGrid>


к примеру, вот такой грид, который биндится к списку Shapeslist. Лучше заменить List на ObservableCollection. Для Wpf он роднее smile
здесь же два поля "Параметр" и "Значение", которые биндятся соответственно к свойствам PropertyDescription  и PropertyValue класса ShapesList.

это что касается самого простого отображения данных. еще надо не забыть в DataContent-e грида указать ссылку на класс, содержащий List<Shape> ShapesList = new List<Shape>(). иначе грид просто не знает откуда брать ShapeList. 
а вот с изменением тут сложнее. для изменение данных свой-во IsReadOnly лучше стереть, а Mode выставить в TwoWays. Однако, учитывая разнородность данных, придется переписывать Template у грида. сам не делал, но почитать можно http://msdn.microsoft.com/en-us/library/cc278066(v=vs.95).aspx

Автор: Storkur 19.4.2011, 16:38
Спасибо, особо что то не разобрался, но нашел сторонний компонент Property Grid тут  http://wpg.codeplex.com/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)