WPF DataGrid 突出显示与所选单元格匹配的列中的所有单元格

快照

用一个自定义类填充了一个ObservableCollection<>(也尝试了一个List<>)。我已将集合绑定到 DataGrid 并定义了列。现在我想选择一个单元格并突出显示其中具有相同字符串的其他单元格(在同一列中,尽管其他列中的数据永远不会匹配)。

<Window.Resources>
    <local:CellHighlighterConverter x:Key="cellHighlighterConverter" />
    <CollectionViewSource x:Key="ScanCollectionViewSource" CollectionViewType="ListCollectionView" />
    <Style x:Key="CenterCell" TargetType="TextBlock">
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
    </Style>
    <Style x:Key="CellPad" TargetType="TextBlock">
        <Setter Property="Margin" Value="15,0,15,0" />
    </Style>
    <Style x:Key="CellHighlighterStyle" TargetType="TextBlock" >
        <Setter Property="Background" Value="{Binding IsMatching, NotifyOnSourceUpdated=True, Converter={StaticResource cellHighlighterConverter}}" />
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
    </Style>
</Window.Resources>
<Grid HorizontalAlignment="Center" >
    <DataGrid x:Name="scans" DataContext="{StaticResource ScanCollectionViewSource}" ItemsSource="{Binding}" AutoGenerateColumns="False" FontFamily="Lucida Console" Margin="10" MouseUp="scans_MouseUp" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Device Name" Binding="{Binding Hostname}" Width="125" />
            <DataGridTextColumn Header="Scan Date" Binding="{Binding ScanDate}" Width="75" ElementStyle="{StaticResource CenterCell}" />
            <DataGridTextColumn Header="GUID" Binding="{Binding GUID}" Width="300" ElementStyle="{StaticResource CenterCell}" />
            <DataGridTextColumn Header="MAC" Binding="{Binding MAC}" Width="105" ElementStyle="{StaticResource CellHighlighterStyle}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

背后的代码

private ObservableCollection<Scan> ReadFiles()
    {
        scanList = new List<Scan>();
        ...
        foreach(string file in files)
        {
            Scan newScan = new Scan();
            ...fill newScan with data
            scanList.Add(newScan);
        }
        scanList = scanList.OrderBy(x => x.Hostname).ThenByDescending(x => x.ScanDate).ToList();
        scanCollection = new ObservableCollection<Scan>(scanList);
        return scanCollection;        
   }

我试图实现这一目标的方法。向类添加了一个属性,然后在鼠标悬停时,如果数据匹配(这有效),则设置该属性,然后使用转换器根据该数据设置背景。网格不刷新或其他错误。我是在正确的轨道上还是有更好的方法?

private void scans_MouseUp(object sender, MouseButtonEventArgs e)
    {
        string selMAC = ((Scan)((DataGrid)sender).SelectedValue).MAC;
        foreach (Scan scan in scanList)//((DataGrid)sender).Items.OfType<Scan>().ToList() )
        {
            // compare values
            if (scan.MAC == selMAC)
            {
                scan.IsMatch = true;
            } else
            {
                scan.IsMatch = false;
            }
            //scans.Items.Refresh();
        }
    }
}

public class CellHighlighterConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if( (Boolean)value )
        {
            return new SolidColorBrush(Colors.Green);
        }
        return SystemColors.AppWorkspaceColor;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}


public class Scan
{
    public Scan()
    {
        this.IsMatch = false;
    }

    public string Hostname { get; set; }
    public string ScanDate { get; set; }
    public string GUID { get; set; }
    public string MAC { get; set; }
    public bool IsMatch { get; set; }
}

Scan应该实现INotifyPropertyChanged接口并引发IsMatch属性通知

private bool _IsMatch;
public bool IsMatch 
{
    get { return _IsMatch; }
    set 
    { 
         if (_IsMatch == value) return;
         _IsMatch = value;
         OnPropertyChanged("IsMatch");
    }
}

如果没有这样的通知,即使您更改 IsMatch,也不会触发 Convert 方法。

我要解决的其他问题:

Convert 方法应该返回 Brush,而不是 Color

{
    return (bool)value ? Brushes.Green : SystemColors.AppWorkspaceBrush;
}

使用SelectionChangedevent 而不是MouseUp. MouseUp 可以在同一个单元格上多次发生,无需每次都搜索数学

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF Datagrid单元格按钮图像未显示

来自分类Dev

如何在wpf datagrid中获取所选单元格的行标题值?

来自分类Dev

在WPF DataGrid单元格编辑期间显示弹出窗口

来自分类Dev

WPF DataGrid单元格不退出编辑模式

来自分类Dev

在WPF中将DataGrid所选行的所有单元格置于“编辑”模式

来自分类Dev

设置DataGrid单元格背景色WPF

来自分类Dev

WPF DataGrid触发单元格内容

来自分类Dev

WPF DataGrid的结构-根据值更改单元格

来自分类Dev

如果单元格包含特定值,则WPF DataGrid更改单元格背景

来自分类Dev

WPF DataGrid单元格值更改事件

来自分类Dev

在单元格值中绑定WPF DataGrid列标题文本

来自分类Dev

使用样式化的单元格更改在DataGrid中突出显示所选行的方式

来自分类Dev

从datagrid WPF中的单元格中移出焦点

来自分类Dev

WPF DataGrid,在单元格中转换值

来自分类Dev

WPF C#DataGrid编辑单元格

来自分类Dev

WPF Datagrid获取选定的单元格值

来自分类Dev

WPF DataGrid:设置单个单元格的样式

来自分类Dev

WPF DataGrid绑定后如何修改单元格

来自分类Dev

Wpf DataGrid仅在单击单元格时更新

来自分类Dev

在WPF中将DataGrid所选行的所有单元格置于“编辑”模式

来自分类Dev

在WPF Datagrid中更改单个单元格的颜色

来自分类Dev

wpf datagrid在xaml中的前两个单元格或列索引大于1之后应用单元格模板

来自分类Dev

如果切换所选行,WPF DataGrid将不显示单元格编辑

来自分类Dev

在单元格值中绑定WPF DataGrid列标题文本

来自分类Dev

选择单元格/行时更改单元格/行文本颜色 - DataGrid WPF

来自分类Dev

WPF DataGrid 动态宽度单元格高亮显示

来自分类Dev

Datagrid 单元格内容在 WPF 中不可见

来自分类Dev

WPF DataGrid SelectedRow 仅突出显示数据单元格中的文本

来自分类Dev

如何更改 WPF 中的 DataGrid 单元格悬停颜色?

Related 相关文章

  1. 1

    WPF Datagrid单元格按钮图像未显示

  2. 2

    如何在wpf datagrid中获取所选单元格的行标题值?

  3. 3

    在WPF DataGrid单元格编辑期间显示弹出窗口

  4. 4

    WPF DataGrid单元格不退出编辑模式

  5. 5

    在WPF中将DataGrid所选行的所有单元格置于“编辑”模式

  6. 6

    设置DataGrid单元格背景色WPF

  7. 7

    WPF DataGrid触发单元格内容

  8. 8

    WPF DataGrid的结构-根据值更改单元格

  9. 9

    如果单元格包含特定值,则WPF DataGrid更改单元格背景

  10. 10

    WPF DataGrid单元格值更改事件

  11. 11

    在单元格值中绑定WPF DataGrid列标题文本

  12. 12

    使用样式化的单元格更改在DataGrid中突出显示所选行的方式

  13. 13

    从datagrid WPF中的单元格中移出焦点

  14. 14

    WPF DataGrid,在单元格中转换值

  15. 15

    WPF C#DataGrid编辑单元格

  16. 16

    WPF Datagrid获取选定的单元格值

  17. 17

    WPF DataGrid:设置单个单元格的样式

  18. 18

    WPF DataGrid绑定后如何修改单元格

  19. 19

    Wpf DataGrid仅在单击单元格时更新

  20. 20

    在WPF中将DataGrid所选行的所有单元格置于“编辑”模式

  21. 21

    在WPF Datagrid中更改单个单元格的颜色

  22. 22

    wpf datagrid在xaml中的前两个单元格或列索引大于1之后应用单元格模板

  23. 23

    如果切换所选行,WPF DataGrid将不显示单元格编辑

  24. 24

    在单元格值中绑定WPF DataGrid列标题文本

  25. 25

    选择单元格/行时更改单元格/行文本颜色 - DataGrid WPF

  26. 26

    WPF DataGrid 动态宽度单元格高亮显示

  27. 27

    Datagrid 单元格内容在 WPF 中不可见

  28. 28

    WPF DataGrid SelectedRow 仅突出显示数据单元格中的文本

  29. 29

    如何更改 WPF 中的 DataGrid 单元格悬停颜色?

热门标签

归档