我遇到以下问题:我在GridView
中嵌入了ListView
。它有两列(第一列和第二列),它们的单元格中最初具有相同的值,但通过使用其他UI元素,用户可以更改第二列中单元格中的值。我想要做的是更改同一row
中的单元格的颜色,当它们的值因 UI 的更改而不同时。以下是我正在谈论的ListView
和GridView
:
此处,“观察”和“隐藏状态”列中的第一个单元格应更改其颜色,指示值的差异。我有以下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
中的事情更复杂。像上面那样的简短解决方案对我的原因很有帮助。
答案 0 :(得分:3)
您可以做的最简单的事情是向您的类添加另一个属性,其中包含observationStr
和stateStr
属性。新属性应为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}}