C# 添加新项时DataGrid未触发集合设置程序

C# 添加新项时DataGrid未触发集合设置程序,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个包含两个文本列和一个复选框列的数据网格。每当用户手动输入值并通过制表符输入新行时,ItemsSource不会更新(集合的setter不会启动) 如何使其与属性同步?我应该实施INotifyCollectionChanged?我是否应该在单独的集合类中执行此操作,如本例所示: 您可以尝试在CollectionChanged事件中订阅收藏。调用该方法时,您将在列表中获得有关所执行操作的所有信息。例如,添加或删除的元素 您可以在CollectionChanged事件上检查它,添加新行时集合

我有一个包含两个文本列和一个复选框列的数据网格。每当用户手动输入值并通过制表符输入新行时,
ItemsSource
不会更新(集合的setter不会启动)


如何使其与属性同步?我应该实施
INotifyCollectionChanged
?我是否应该在单独的集合类中执行此操作,如本例所示:


您可以尝试在CollectionChanged事件中订阅收藏。调用该方法时,您将在列表中获得有关所执行操作的所有信息。例如,添加或删除的元素

您可以在CollectionChanged事件上检查它,添加新行时集合更改的计数

Xaml


代码隐藏

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Parameters = new ObservableCollection<ParamaterClass>();
            Parameters.CollectionChanged += Parameters_CollectionChanged;
            ParamaterClass ParamaterClass = new ParamaterClass();
            ParamaterClass.Key = "Test1Key";
            ParamaterClass.Value = "Test1Value";
            ParamaterClass.IsPostParameter = true;

            Parameters.Add(ParamaterClass);
        }

        void Parameters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            int count = Parameters.Count;
        }
private void Window\u已加载(对象发送方,路由目标)
{
参数=新的ObservableCollection();
Parameters.CollectionChanged+=参数\u CollectionChanged;
ParamaterClass ParamaterClass=新的ParamaterClass();
ParamaterClass.Key=“Test1Key”;
ParamaterClass.Value=“Test1Value”;
ParamaterClass.IsPostParameter=true;
Parameters.Add(ParamaterClass);
}
无效参数\u CollectionChanged(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
int count=参数。count;
}

但是,该事件从未被触发,因此我的处理程序从未被命中:Parameters.CollectionChanged+=new notifycollectionchangedventhandler((x,y)=>{});
 <DataGrid HeadersVisibility="Column" RowHeaderWidth="0" Grid.Row="2" Grid.ColumnSpan="2" ItemsSource="{Binding Parameters,Mode=TwoWay}" 
                                      CanUserAddRows="True" AutoGenerateColumns="False" CanUserDeleteRows="True" MinHeight="140" 
                                      IsSynchronizedWithCurrentItem="True">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Key" Binding="{Binding Key,Mode=TwoWay}" Width="*"/>
                    <DataGridTextColumn Header="Value" Binding="{Binding Value,Mode=TwoWay}" Width="*"/>
                    <DataGridCheckBoxColumn Header="Post parameter" Binding="{Binding IsPostParameter,Mode=TwoWay}" Width="Auto" />
                </DataGrid.Columns>
            </DataGrid>
 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Parameters = new ObservableCollection<ParamaterClass>();
            Parameters.CollectionChanged += Parameters_CollectionChanged;
            ParamaterClass ParamaterClass = new ParamaterClass();
            ParamaterClass.Key = "Test1Key";
            ParamaterClass.Value = "Test1Value";
            ParamaterClass.IsPostParameter = true;

            Parameters.Add(ParamaterClass);
        }

        void Parameters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            int count = Parameters.Count;
        }