【问题标题】:WPF datagrid not updating contents until I move the scrollbar? [duplicate]在我移动滚动条之前,WPF 数据网格不会更新内容? [复制]
【发布时间】:2014-07-24 05:14:35
【问题描述】:

所以我正在尝试使用列表填充数据网格,该列表将在列表更改时自动更新。我将 ItemsSource 设置为 ObservableCollection,它可以工作,只是在我移动滚动条之前数据网格值不会真正更新。如何在没有任何干扰的情况下立即更新数据网格?我只滚动到列表底部并单击添加到集合中的按钮。奇怪的是,如果我使用我实现的过滤器来查找列表中的项目,如果我在过滤时添加它自动更新(没有滚动条,因为它更短......相关? )

以下是我能想象到的所有相关部分:

在 MainWindow 文件中,我设置了 ItemsSource:

ProcessBox.ItemsSource = Manager.ProcessList;

这里是我创建 ObservableCollection 属性的地方。会不会和setter有关?

    public ObservableCollection<ProcessContainer> ProcessList
    {
        get { return processList; }
        set { processList = value; }
    }

在按钮点击我有这段代码:

        Manager.ProcessList.Add(new ProcessContainer("Test", 5, 5));

这是我在输入文本时应用到集合的搜索过滤器:

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        CollectionViewSource.GetDefaultView(ProcessBox.ItemsSource).Refresh();
    }

以及实际的过滤方式:

    private bool ProcessFilter(object item)
    {
        if (String.IsNullOrEmpty(FilterInput.Text))
        {
            return true;
        }
        else
        {
            return ((item as ProcessContainer).ProcessName.IndexOf(FilterInput.Text, StringComparison.OrdinalIgnoreCase) >= 0);
        }
    }

这里是 xaml:

    <DataGrid x:Name="ProcessBox" SelectionMode="Extended" ScrollViewer.HorizontalScrollBarVisibility="Hidden" GridLinesVisibility="None" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,0,0,33" CanUserReorderColumns="False" MinColumnWidth="50" CanUserResizeRows="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Process" Binding="{Binding ProcessName}" />
            <DataGridTextColumn Header="Memory" Binding="{Binding Memory}" />
        </DataGrid.Columns>
    </DataGrid>

这就是我所能看到的对其产生任何影响的全部内容。没有其他任何东西涉及所涉及的部分。

【问题讨论】:

  • 除非您发布代码,否则不会有任何帮助
  • 我会尝试将相关部分拼凑起来。
  • 请也发布 xaml 代码

标签: c# wpf datagridview observablecollection


【解决方案1】:

使用 ObservableCollection 可确保 DataGrid 收到有关从集合中添加或删除的项目的通知。 根据您的描述,我了解到您希望查看集合中项目内字段的更新 - 为此,您应该使项目实现 INotifypropertyChanged 并在属性更新时引发 PropertyChanged 事件。

INotifyPropertyChanged in MSDN

【讨论】:

  • 这完成了我所需要的。我认为这个问题最终是重复的,因为我没有意识到更改滚动条实际上​​是在更新 itemssource(我认为,无论如何!)。无论如何我都会接受,但我提交了重复投票。
猜你喜欢
  • 2012-05-13
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多