Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
11 / 11 / 2
Регистрация: 04.03.2012
Сообщений: 128

Привязка DataGrid

09.02.2013, 02:01. Показов 5639. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните, почему так криво работает метод добавления в коллекцию и отображение в DataGrid.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<Window x:Class="bild.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:bild"
        Title="MainWindow" Height="519" Width="525">
    <Window.Resources>
        <sys:ViewModel x:Key="DataSource"/>        
    </Window.Resources>
 
        <Grid>
        <ListBox ItemsSource="{Binding Source={StaticResource DataSource}, Path=Persons}" 
                 DisplayMemberPath="Name"                 
            HorizontalAlignment="Left" Margin="49,21,0,201" Name="listBox1" Width="425" />
        <Grid DataContext="{Binding Source={StaticResource DataSource}}" Height="149" HorizontalAlignment="Left" Margin="49,134,0,0" Name="grid1" VerticalAlignment="Top" Width="425">
            <DataGrid 
                ItemsSource="{Binding Source={StaticResource DataSource}, Path=Persons}" 
                AutoGenerateColumns="False" Height="143" HorizontalAlignment="Left" Margin="36,0,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="383" >
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Age}"  Header="Age" ></DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="296,290,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</Window>

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace bild
{   
    public partial class MainWindow : Window
    {
        
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ViewModel r = new ViewModel();
            r.ad();
            dataGrid1.ItemsSource = r.Persons;
        }
    }
    public class ViewModel
    {
        public ViewModel()
        {
            this.Persons = new ObservableCollection<Person>();
            this.Persons.Add(new Person("Ivan", 23));
            this.Persons.Add(new Person("Stefan", 34));
            this.Persons.Add(new Person("Maria", 16));
            this.Persons.Add(new Person("Michael", 78));
            
        }
        public void ad()
        {
           this.Persons = new ObservableCollection<Person>();
            this.Persons.Add(new Person("Maria", 16));
            this.Persons.Add(new Person("Michael", 78));
          
        }
 
        public ObservableCollection<Person> Persons
        {
            get;
            set;
        }
    }
    public class Person
    {
        public Person(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2013, 02:01
Ответы с готовыми решениями:

Привязка БД к DataGrid
Не получается привязать к DataGrid таблицу из базы данных. Использую Entity Framework. Помогите, пожалуйста. ...

Привязка таблицы к DataGrid
Как привязать таблицу из локальной базы данных к datagrid

Двусторонняя привязка DataGrid
Здравствуйте! При привязки коллекции целых чисел к DataGrid возникла проблема. Хочу сделать, чтобы содержание коллекции можно было изменять...

4
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
09.02.2013, 08:45
Объясните, почему так криво работает метод добавления в коллекцию и отображение в DataGrid.
Потому что написан криво.
1)
C#
1
2
3
4
        public void ad()
        {
           this.Persons = new ObservableCollection<Person>();
            this.Persons.Add(new Person("Maria", 16));
2)
C#
1
2
3
4
5
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ViewModel r = new ViewModel();
            r.ad();
            dataGrid1.ItemsSource = r.Persons;
Добавлено через 15 секунд
Объясните, почему так криво работает метод добавления в коллекцию и отображение в DataGrid.
Потому что написан криво.
1)
C#
1
2
3
4
        public void ad()
        {
           this.Persons = new ObservableCollection<Person>();
            this.Persons.Add(new Person("Maria", 16));
2)
C#
1
2
3
4
5
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ViewModel r = new ViewModel();
            r.ad();
            dataGrid1.ItemsSource = r.Persons;
0
11 / 11 / 2
Регистрация: 04.03.2012
Сообщений: 128
09.02.2013, 17:25  [ТС]
Почему неправильно?

Добавлено через 7 часов 12 минут
Народ, кто-нибудь может ответить почему не добавляются и не обнавляются данные в DataGrid с привязкой в XAML?
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
10.02.2013, 20:02
хм... вот все таки не понятно в каком контексте это вам все нужно, сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;
 
namespace bild
{
    public class Person
    {
        public Person(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }
 
        public string Name { get; set; }
        public int Age { get; set; }
    }
 
    public partial class MainWindow : Window
    {
        public static ObservableCollection<Person> PersonList { get; set; }
 
        static MainWindow()
        {
            PersonList = new ObservableCollection<Person>()
            { 
                new Person("Ivan",    23),
                new Person("Stefan",  34),
                new Person("Maria",   16),
                new Person("Michael", 78),
            };
        }
 
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void AddNew(object sender, ExecutedRoutedEventArgs e)
        {
            PersonList.Add(new Person("lool", 56));
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<Window x:Class="bild.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:bild"
        Title="MainWindow" Height="519" Width="525">
    
    <Window.CommandBindings>
        <CommandBinding Command="ApplicationCommands.New" Executed="AddNew" />
    </Window.CommandBindings>
    
    <Window.InputBindings>
        <KeyBinding Command="New" Key="Insert" />
    </Window.InputBindings>
    
    <Window.Resources>
        <CollectionViewSource x:Key="PersonList" Source="{x:Static sys:MainWindow.PersonList}" />
    </Window.Resources>
 
    <StackPanel DataContext="{StaticResource PersonList}">
        <ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" />
        <DataGrid ItemsSource="{Binding}"  AutoGenerateColumns="False" >
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Age}" Header="Age" />
                <DataGridTextColumn Binding="{Binding Name}" Header="Name" />
            </DataGrid.Columns>
        </DataGrid>
        <Button Command="New" Content="Add" />
    </StackPanel>
</Window>
3
11 / 11 / 2
Регистрация: 04.03.2012
Сообщений: 128
10.02.2013, 20:07  [ТС]
Большое спасибо. Всё понятно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2013, 20:07
Помогаю со студенческими работами здесь

Динамическая привязка к DataGrid
DataGrid создаётся динамически. Привязку к столбцам сделал, но при добавлении данных помимо созданных мной столбцов появляются столбцы с...

Привязка DataGrid к БД SQL
Здравствуйте. Подскажите, как отобразить таблицу из БД SQL в DataGrid? Только начал изучать SQL, никак не получается.... И еще..Сильно ли...

Привязка datatable к datagrid
Нашел пример на www.codescratcher.com, но там пример без {Binding}. Как это можно сделать с {Binding}?

Привязка Datagrid к List
Подскажите пожалуйста как привязать datagrid к list так чтобы отредактированные данные в datagrid сохранялись в моем листе

Привязка списка к DataGrid
WPF Есть класс атрибута public class Attr { public Guid Id {get; set;} public string Name{get;set;} public object...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru