Заполнить DataGrid через Binding

247
27 мая 2017, 14:58

Недавно начал изучать wpf поэтому могу задавать достаточно глупые вопросы. Итак есть DataGrid

       <Page.DataContext>
           <local:ClientPortfellVM />
       </Page.DataContext>
  //....
       <DataGrid Margin="0,50,0,0" ItemsSource="{Binding collection}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Type"  IsReadOnly="True" Width="*" Binding="{Binding Type}"/>
                <DataGridTextColumn Header="Balance" IsReadOnly="True"  MaxWidth="200" MinWidth="200" Binding="{Binding Balance}" />
            </DataGrid.Columns>
        </DataGrid> 

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

 public class ClientPortfellVM
 {
    public ObservableCollection<FundViewModel> collection = new ObservableCollection<FundViewModel>();    

    public class FundViewModel
    {
        public string Type { get; set; }
        public string Balance { get; set; }
    } 
}

И теперь мне нужно, как я понимаю заполнить коллекцию примерно так :

    collection.Add(new FundViewModel() { Type = "111", Balance = "222" });

Только куда её вписывать, если все написанное вообще правильно, не знаю - подскажите кто знает, а если неправильно поправьте пожалуйста.

Answer 1

Во-первых сделайте collection свойством, иначе привязка не пройдет:

public ObservableCollection<FundViewModel> Collection { get; set }

Свойства принято писать с заглавной буквы.

заполняете коллекцию в методе или напрямую из конструктора класса:

public class ClientPortfellVM
{
    public ObservableCollection<FundViewModel> Сollection { get; set; }
    public ClientPortfellVM()
    {
        Collection = new ObservableCollection<FundViewModel>(); 
        Collection.Add(new FundViewModel() { Type = "111", Balance = "222" });
    }

    public class FundViewModel
    {
        public string Type { get; set; }
        public string Balance { get; set; }
    } 
}

но у меня всего 2 столбца должно быть, а появляется целых 4

все дело в свойстве AutoGenerateColumns. По умолчанию оно установлено в true, что говорит что таблица автоматически генерирует столбцы в зависимости от того сколько свойств в классе. Установите его в false и все будет как надо:

<DataGrid Margin="0,50,0,0" ItemsSource="{Binding collection}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Type"  IsReadOnly="True" Width="*" Binding="{Binding Type}"/>
        <DataGridTextColumn Header="Balance" IsReadOnly="True"  MaxWidth="200" MinWidth="200" Binding="{Binding Balance}" />
    </DataGrid.Columns>
</DataGrid> 
READ ALSO
root\\CIMV2, select * from Win32_***. Где взять информацию о таблицах Win32_***. C#

root\\CIMV2, select * from Win32_***. Где взять информацию о таблицах Win32_***. C#

Хочу написать одно приложение на c#, которое выдает информацию о ПКПошарив интернеты, нашел такую вещь System

372
Изменить выбор в ListBox

Изменить выбор в ListBox

Добавляю аудио файлы в ListBox нажатием на ButtonДалее срабатывает OpenFileDialog (код ниже)

320
Как называется такая форма записи?

Как называется такая форма записи?

Есть два класса Human и StudentПусть, Student наследуется от Human

256
Чтение файла .adm

Чтение файла .adm

Есть задача - программа проверки правописанияВ качестве словаря должен быть использован файл типа

344