Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Bind DataGrid MyClass 
:(
    Опции темы
DenWPF
Дата 2.7.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



не могу понять как так биндить?

у меня есть класс MyClass с полями  string name и int age
PM MAIL   Вверх
SergeyLoginov
Дата 2.7.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.9.2009
Где: Иваново

Репутация: 4
Всего: 4



Если вопрос в том, как создать таблицу DataGrid на основе списка объектов класса MyClass, то надо для начала организовать в контексте данных публичное свойство - коллекцию объектов этого класса (public ObservableCollection<MyClass> MyClassObjects { get; set; }), заполнить ее. И привязать к свойству ItemsSource таблицы: 
Код

<DataGrid ItemsSource="{Binding MyClassObjects }"/>

Таблица будет создана автоматически. Если свойству AutoGenerateColumns таблицы присвоить значение False, то вид и содержание столбцов будут определяться программистом в xaml. В интернете, в общем-то, полно инфы. Поэтому если и задавать тут вопрос, то надо как-то конкретней.

Это сообщение отредактировал(а) SergeyLoginov - 2.7.2010, 12:36
PM MAIL   Вверх
DenWPF
Дата 2.7.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Код

ObservableCollection<Project> projects = new ObservableCollection<Project>();
        public ObservableCollection<Project> GetProjects { get { return projects; } }


если так 
Код

                   <Custom:DataGrid Background="{x:Null}" x:Name="datagrid" AutoGenerateColumns="False">
                        <GridView>
                            <GridViewColumn Width="140" Header="Game Name" DisplayMemberBinding="{Binding Title}"  />
                        </GridView>
                    </Custom:DataGrid>

и в коде потом дописать 

Код

datagrid.ItemsSource = GetProjects;

то выдает ошибку что типо есть уже items.

если в хамле указать itemssource то там другая ошибка с Convertom или что то в этом роде.

Это сообщение отредактировал(а) DenWPF - 2.7.2010, 15:01
PM MAIL   Вверх
SergeyLoginov
Дата 2.7.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.9.2009
Где: Иваново

Репутация: 4
Всего: 4



Дело в том, что описывая таблицу так
Код

                   <Custom:DataGrid Background="{x:Null}" x:Name="datagrid" AutoGenerateColumns="False">
                        <GridView>
                            <GridViewColumn Width="140" Header="Game Name" DisplayMemberBinding="{Binding Title}"  />
                        </GridView>
                    </Custom:DataGrid>
 
Ты задаешь Items коллекцией из одного элемента - объекта GridView. Поэтому и такая ошибка. Если ты таким образом пытаешься задать вид столбцов, то это делается иначе:
Код

<Custom:DataGrid ItemsSource="{Binding GetProjects}" AutoGenerateColumns="False">                         
     <Custom:DataGrid.Columns>
          <Custom:DataGridTextColumn Binding="{Binding Title}" Header="Game Name"/>
     </Custom:DataGrid.Columns>
</Custom:DataGrid>


При этом получишь ровным счетом то же, что и в случае:
Код

    <Custom:DataGrid ItemsSource="{Binding GetProjects}" />                         

Вообще, задать вид столбцов можно очень даже нетривиальный. Но тут надо поковыряться. 
Почитай статейки (статья, Наверное, то, что тебе нужно сейчас). Попробуй сделать как я описал (с помощью привязки, а не назначения свойству ItemsSource значения в коде). Будет ошибка - предоставь код класса, xaml'а и текст ошибки.
PM MAIL   Вверх
DenWPF
Дата 3.7.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



так будет работать, но только если вызвать в коде datagrid.ItemsSource = GetProjects;

как обновить datagrid если добавились новые значения

автоматически это конечно хорошо, но мне надо не все поля из того класса.





Это сообщение отредактировал(а) DenWPF - 3.7.2010, 11:54
PM MAIL   Вверх
DenWPF
Дата 3.7.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



А как связать сразу не сколько?

ну вот у меня есть класс 


Код

    public class Project
    {
        public Project() { }

        private string _title = "1";
        private string _smallDescription = "";
        private string _description = "";
        private string _url = "";
        private int _price = 0;
        private DateTime _datetime = new DateTime();

        //public status = Status

        public string Title { get { return _title; } set { _title = value; } }
        public string SmallDescription { get { return _smallDescription; } set { _smallDescription = value; } }
        public string Description { get { return _description; } set { _description = value; } }
        public string Url { get { return _url; } set { _url = value; } }
        public int Price { get { return _price; } set { _price = value; } }
        public DateTime DateTime { get { return _datetime; } set { _datetime = value; } }
    }
    class Category
    {
        public Category() { }

        private string _title;
        private List<PodCategory> _podcategory = new List<PodCategory>();
        private string _img = "bez_gmo.jpg";

        public string Title { get { return _title; } set { _title = value; } }
        public List<PodCategory> PodCategory { get { return _podcategory; } set { _podcategory = value; } }
        public string Image { get { return _img; } set { _img = value; } }
    }
    class PodCategory
    {
        public PodCategory() { }

        private string _title;
        private List<Project> _projects = new List<Project>();
        private string _img = "bez_gmo.jpg";

        public string Title { get { return _title; } set { _title = value; } }
        public List<Project> Projects { get { return _projects; } set { _projects = value; } }
        public string Image { get { return _img; } set { _img = value; } }
    }

и хочется забиндить их Category и PodCategory - в Menu а когда выберается под категория в DataGrid Высвечивается инфа из PodCategory.Project 

а при выбере в Datagrid элемента то в RichTextBox - высвечивается инфа из Project часть.

я щас сам это буду пытаться , но думаю у меня не фига не выйдет. прелогаю проект.



http://depositfiles.com/files/u8jfxlvvc
PM MAIL   Вверх
SergeyLoginov
Дата 5.7.2010, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.9.2009
Где: Иваново

Репутация: 4
Всего: 4



Цитата(DenWPF @ 3.7.2010,  10:37)
так будет работать, но только если вызвать в коде datagrid.ItemsSource = GetProjects;

как обновить datagrid если добавились новые значения

Для того, чтобы DataGrid обновлялся автоматически, надо, чтобы свойство GetProjects имело тип ObservableCollection<Project>. Тогда при изменении (добавлении/удалении) элементов этой коллекции будет изменяться и таблица. А чтобы и содержание таблицы было актуальным значениям элементов коллекции, надо чтобы класс Project поддерживал интерфейс INotifyPropertyChanged (поищи про это в инете, информации полно).

Добавлено через 1 минуту и 44 секунды
Цитата(DenWPF @ 3.7.2010,  13:36)
А как связать сразу не сколько?

ну вот у меня есть класс 

и хочется забиндить их Category и PodCategory - в Menu а когда выберается под категория в DataGrid Высвечивается инфа из PodCategory.Project 

а при выбере в Datagrid элемента то в RichTextBox - высвечивается инфа из Project часть.

я щас сам это буду пытаться , но думаю у меня не фига не выйдет. 

Все это возможно. Разбирайся, задавай конкретные вопросы - получится smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.