【发布时间】: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