【发布时间】:2012-02-13 10:13:06
【问题描述】:
我对 WPF .NET 4 中的 DataGrid 有疑问。
这是带有 DataGrid 的 XAML 代码:
<DataGrid Name="m_DataGrid">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Name}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="Gray" />
<Setter Property="Foreground" Value="White" />
<Setter Property="BorderBrush" Value="Gray" />
</Trigger>
<DataTrigger Binding="{Binding Path=IsRed}" Value="True">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
并且窗口代码中有方法:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 100; i++)
{
m_DataGrid.Items.Add(new MyItem(string.Format("Item {0}", i)));
}
}
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space)
{
e.Handled = true;
((MyItem)m_DataGrid.SelectedItem).IsRed = !((MyItem)m_DataGrid.SelectedItem).IsRed;
m_DataGrid.SelectedIndex++;
m_DataGrid.Items.Refresh();
}
}
这里是 MyItem 类代码:
public class MyItem
{
public string Name { get; set; }
public bool IsRed { get; set; }
public MyItem(string _Name)
{
Name = _Name;
IsRed = false;
}
}
问题是,我必须使用方法 m_DataGrid.Items.Refresh();以红色显示项目。但是当我有例如。 100项这个方法太慢了。因此,当我按住空格键时,项目会非常缓慢地用红色标记。如何以更好、更优雅的方式做到这一点?如何在没有刷新方法的情况下更改项目颜色? 感谢您的回答和提示。
【问题讨论】: