首页 > 解决方案 > 无法将数据网格绑定到我的类对象的可观察集合

问题描述

我正在编写一个有多个选项卡的 GUI。每个选项卡都有一个标题和内容。Tab 绑定到对象 Item 的可观察集合。选项卡的内容是一个 DataGrid,我想将它绑定到另一个对象 LogGUIData(它是 Item 的类成员变量)。数据由套接字读取填充。我厌倦了寻找很多答案,但找不到任何答案。我知道我在某些地方遗漏了一些东西,因为我是 C# 和 WPF 编程的新手。我的代码如下。提前致谢


<TabControl.ContentTemplate>
                        <DataTemplate>
                            <DataGrid Name="dgLogdata"  Margin="10" VerticalScrollBarVisibility="Visible" ItemsSource="{Binding LogDataOC, Mode=TwoWay}"
                                      AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" >                              
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="Header" Binding="{Binding strHeaderData}" FontFamily="Arial" />
                                </DataGrid.Columns>
                            </DataGrid>
                        </DataTemplate>
                    </TabControl.ContentTemplate>

c# 代码

public class Item : INotifyPropertyChanged
        {

            public string Header { get; set; }

            public static int _count = -1;
            public int Count
            {
                get { return _count; }
                set { _count = value; }
            }


            public Item()
            {
                LogDataOC = new ObservableCollection<GUILogData>();
                _count++;//increase the count of tab. This will represent the index of the tab
            }

            public event PropertyChangedEventHandler PropertyChanged;
            private void OnPropertyChanged(string propertyName)
            {
                var handler = PropertyChanged;
                handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }

            private ObservableCollection<GUILogData> _logDataOC { get; set; }

            public ObservableCollection<GUILogData> LogDataOC
            {
                get { return _logDataOC; }
                set
                {
                    _logDataOC = value;
                    OnPropertyChanged("LogDataOC");
                }
            }
        }

标签: c#wpfdata-bindingdatagrid

解决方案


我绑定到私有成员而不是属性。修改后的 Xaml 代码:

<TabControl.ContentTemplate>
                        <DataTemplate>
                            <DataGrid Name="dgLogdata"  Margin="10" VerticalScrollBarVisibility="Visible" ItemsSource="{Binding LogDataOC, Mode=TwoWay}"
                                      AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" >                              
                                <DataGrid.Columns>
                                    *<DataGridTextColumn Header="Header" Binding="{Binding HeaderData}" FontFamily="Arial" />*                                  
                                </DataGrid.Columns>
                            </DataGrid>
                        </DataTemplate>
                    </TabControl.ContentTemplate>

推荐阅读