Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在WPF数据网格中为整个列而不是一个单元格发出通知?_.net_Wpf_Datagrid_Wpfdatagrid - Fatal编程技术网

.net 如何在WPF数据网格中为整个列而不是一个单元格发出通知?

.net 如何在WPF数据网格中为整个列而不是一个单元格发出通知?,.net,wpf,datagrid,wpfdatagrid,.net,Wpf,Datagrid,Wpfdatagrid,我有一个不寻常的要求。我有一个5行的WPF数据网格。如果我更改了ColumnB下的任何单元格,则应通知ColumnB下的所有行 现在,在更新ColumnB下的一个单元格后,只有该单元格得到更新,如果双击ColumnB下的任何其他单元格并进入编辑模式,则只会显示新值 如果一行已更新,如何强制所有行上的RaiseProperty更改?通常我会在包含DataGrid的ItemsSource的codebehind中执行此操作 下面是一个粗略的例子: MyObservableCollection.Coll

我有一个不寻常的要求。我有一个5行的WPF数据网格。如果我更改了ColumnB下的任何单元格,则应通知ColumnB下的所有行

现在,在更新ColumnB下的一个单元格后,只有该单元格得到更新,如果双击ColumnB下的任何其他单元格并进入编辑模式,则只会显示新值


如果一行已更新,如何强制所有行上的RaiseProperty更改?

通常我会在包含DataGrid的ItemsSource的codebehind中执行此操作

下面是一个粗略的例子:

MyObservableCollection.CollectionChanged += MyObservableCollection_CollectionChanged;

...

void MyObservableCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    // Attach PropertyChange event to item
    if (e.NewItems != null)
        foreach (SomeDataItem item in e.NewItems)
            item.PropertyChanged += SomeDataItem_PropertyChanged;

    if (e.OldItems != null)
        foreach (SomeDataItem item in e.OldItems)
            item.PropertyChanged -= SomeDataItem_PropertyChanged;
}

private bool shouldUpdate = true;

void SomeDataItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    // If PropertyChanged raised on ColumnB, and shouldUpdate flag is true
    if (e.PropertyName == "ColumnB" && shouldUpdate)
    {
        // Disable updating all collections to prevent infinite looping
        shouldUpdate = false;

        foreach (SomeDataItem item in e.NewItems)
        {
            // If this isn't the current item, raise a PropertyChanged event on ColumnB
            if (item != sender)
                item.RaisePropertyChanged(e.PropertyName);
        }

        // Reenable updating all collections
        shouldUpdate = true;
    }
}

谢谢你,瑞秋。我最终使用了CollectionView.Refresh()。但这更像是一种黑客行为,可能并不适用于所有解决方案。谢谢你的解决方案