WPF:当GridView中的两个特定单元格的值不同时,更改GridView单元格颜色

时间:2014-09-22 11:36:50

标签: c# wpf listview gridview

我遇到以下问题:我在GridView中嵌入了ListView。它有两列(第一列和第二列),它们的单元格中最初具有相同的值,但通过使用其他UI元素,用户可以更改第二列中单元格中的值。我想要做的是更改同一row中的单元格的颜色,当它们的值因 UI 的更改而不同时。以下是我正在谈论的ListViewGridView

enter image description here

此处,“观察”和“隐藏状态”列中的第一个单元格应更改其颜色,指示值的差异。我有以下XAML代码和GridViews

    <ListView Grid.Row="6" Margin="10" Name="ObservationsListView" SelectionChanged="ObservationsListView_SelectionChanged_1">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Observation" Width="122" DisplayMemberBinding="{Binding observationStr}" />
                <GridViewColumn Header="Hidden State" Width="122" DisplayMemberBinding="{Binding stateStr}" />
                <GridViewColumn Header="Value" Width="122" DisplayMemberBinding="{Binding valueStr}" />
            </GridView>
        </ListView.View>
    </ListView>

最简单的方法是什么?简单地说,像

 GridView.Columns[0].Cell[currentCellIndex].Color = RED
 GridView.Columns[1].Cell[currentCellIndex].Color = RED

对我来说会很好,但我知道由于所有数据绑定的东西,WPF中的事情更复杂。像上面那样的简短解决方案对我的原因很有帮助。

1 个答案:

答案 0 :(得分:3)

您可以做的最简单的事情是向您的类添加另一个属性,其中包含observationStrstateStr属性。新属性应为bool类型,并且当值彼此相等时返回true,当{em>} false时为Trigger。然后,您可以在网格中的public bool AreValuesChanged { get { return observationStr != stateStr; } } 中绑定到该属性的数据,以便为您更新颜色:

NotifyPropertyChanged("AreValuesChanged")

当然,当您更新其他两个值以使其工作时,您还需要调用public string observationStr // repeat for stateStr { get { return _observationStr; } set { _observationStr = value; NotifyPropertyChanged(observationStr); NotifyPropertyChanged(AreValuesChanged); } } 方法:

DataTrigger

对于颜色更改,您可以在Style中添加一个简单的ListView - 确保在<Style TargetType="{x:Type ListViewItem}"> <Style.Triggers> <DataTrigger Binding="{Binding AreValuesChanged}" Value="True"> <Setter Property="Background" Value="Red" /> </DataTrigger> </Style.Triggers> </Style> 控件的范围内声明:

{{1}}