powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
5 сообщений из 5, страница 1 из 1
Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
    #39927004
ArtemShnip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите привязать таблицу к DataGrid.Columns, что бы она обновлялась при изменении коллекции
p.s. только начал учиться
Код: 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.
77.
public partial class MainWindow : Window
    {
        private readonly string _path = $"{Environment.CurrentDirectory}\\programDataList.json";
        private BindingList<ProgramModel> _programModelsList;
        private FileIOService _fileIOservice;

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = _programModelsList;
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _fileIOservice = new FileIOService(_path);
            try
            {
                _programModelsList = _fileIOservice.LoadDate();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Close();
            }

            _programModelsList.Add(
             new ProgramModel()
             {
                 Id = "jjjj",
                 Name = "ferfr"
             });
            ProgramWatcher _programWatcher = new ProgramWatcher();
            Thread thread = new Thread(_programWatcher.Wather);
            thread.Start();
            //dgTodoList.ItemsSource = _programModelsList; // если без этого то сохраняет в json и можно сортировать,но не отображает в таблице
            _programWatcher.NotifyStart += AddNew;
            _programWatcher.NotifyStop += AddInSave;
            _programModelsList.ListChanged += _programModelsList_ListChanged;
        }

        public void AddNew(string id)
        {
            var proc = Process.GetProcessById(int.Parse(id));
            _programModelsList.Add(
             new ProgramModel()
             {
                 Id = id,
                 Name = proc.ProcessName,
                 TimeStart = proc.StartTime
             });
            _programModelsList.ListChanged += _programModelsList_ListChanged;
        }
        public void AddInSave(string id)
        {
            //DateTime time = DateTime.Now;
            //int index = 222; //_programModelsList.IndexOf(id);
            //_programModelsList[index].TimeStop = time.ToLocalTime();
            //_programModelsList[index].LongTime =
            //    time.ToLocalTime().Subtract(_programModelsList[index].
            //    TimeStart).ToString("h':'m':'s");
        }

        public void _programModelsList_ListChanged(object sender, ListChangedEventArgs e)
        {
            if (e.ListChangedType == ListChangedType.ItemAdded || e.ListChangedType == ListChangedType.ItemDeleted || e.ListChangedType == ListChangedType.ItemChanged)
            {
                try
                {
                    _fileIOservice.SaveDate(sender);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    Close();
                }
            }
        }


Код: 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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
class ProgramModel : INotifyPropertyChanged
    {
        private BindingList<ProgramModel> _programModelsList;
        private string _id;
        private string _name;
        private DateTime _date;
        private DateTime _timeStart;
        private DateTime _timeStop;
        private string _longTime;
        private string _client;

        public string Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public string Name
        {
            get { return _name; }
            set
            {
                if (_name == value)
                    return;
                _name = value;
                OnPropertyChanged("Client");
            }
        }

        public DateTime Date
        {
            get { return _date; }
            set { _date = value; }
        }

        public DateTime TimeStart
        {
            get { return _timeStart; }
            set { _timeStart = value; }
        }


        public DateTime TimeStop
        {
            get { return _timeStop; }
            set { _timeStop = value; }
        }

        public string LongTime
        {
            get { return _longTime; }
            set { _longTime = value; }
        }

        public string Client
        {
            get { return _client; }
            set 
            {
                if (_client == value)
                    return;
                _client = value;
                OnPropertyChanged("Client");
            }
        }
        public BindingList<ProgramModel> ProgramModels
        {
            get
            {
                return _programModelsList;
            }
            set
            {
                _programModelsList = value;
                OnPropertyChanged();
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<Window x:Class="WpfProjectX.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfProjectX"
        mc:Ignorable="d"
        Title="ProjectX" Height="450" Width="885" Loaded="Window_Loaded"  Foreground="Black">
    <Grid>
        <DataGrid x:Name ="dgTodoList" FontSize="16" Margin="5" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path= Id}" IsReadOnly="True" Header="ID" Width="25"/>
                <DataGridTextColumn Binding="{Binding Path= Date}" IsReadOnly="True" Header="Date" Width="100"/>
                <DataGridTextColumn Binding="{Binding Path= Name}" IsReadOnly="True" Header="Name" Width="150"/>
                <DataGridTextColumn Binding="{Binding Path= TimeStart}" IsReadOnly="True" Header="Time start" Width="150"/>
                <DataGridTextColumn Binding="{Binding Path= TimeStop}" IsReadOnly="True" Header="Time stop" Width="150"/>
                <DataGridTextColumn Binding="{Binding Path= LongTime}" IsReadOnly="True" Header="Long time" Width="150"/>
                <DataGridTextColumn Binding="{Binding Path= Client}" IsReadOnly="False" Header="Client" Width="150"/>
            </DataGrid.Columns>
            
        </DataGrid>
    </Grid>
</Window>
...
Рейтинг: 0 / 0
Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
    #39927029
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вызвать OnPropertyChanged с пустым параметром, обновятся все биндинги с этой моделью.
но, что у вас конкретно не обновляется, я так и не понял.
в WPF использует ObservableCollection, а не BindingList
...
Рейтинг: 0 / 0
Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
    #39927092
ArtemShnip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, поменял на ObservableCollection, не совсем понял как "если вызвать OnPropertyChanged с пустым параметром".
Не обновляется,это в смысле динамически. Когда обновляется ObservableCollection<ProgramModel> _programModelsList, что бы вместе с ней обновлялась моя таблица
...
Рейтинг: 0 / 0
Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
    #39927095
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemShnip,

ObsevableCollection<T> уже реализует интерфейс INotifyCollectionChanged, по этому при добавлении или удалении элементов коллекции они будут удаляться из грида.
...
Рейтинг: 0 / 0
Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
    #39927097
ArtemShnip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

сейчас у меня добавляются элементы, только если щелкать фильтр
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Объясните пожалуйста как привязать коллекцию к DataGrid.Columns
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]