【问题标题】:WPF: Change GridView cell colors when two specific cells in the GridView differ in valuesWPF:当 GridView 中的两个特定单元格的值不同时更改 GridView 单元格颜色
【发布时间】:2014-09-22 11:36:49
【问题描述】:

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

在这里,“观察”和“隐藏状态”列中的第一个单元格应该改变它们的颜色,表明值的不同。我有以下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 中的事情更复杂,因为所有数据绑定的东西。像上面这样的捷径解决方案对我的事业很有帮助。

【问题讨论】:

    标签: c# wpf listview gridview


    【解决方案1】:

    您可以做的最简单的事情是向您的类添加另一个属性,其中包含observationStrstateStr 属性。新属性应该是bool 类型,当值不相等时返回true,当它们相等时返回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); }
    }
    

    对于颜色更改,您可以在Style 中添加一个简单的DataTrigger - 确保在ListView 控件的范围内声明它:

    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding AreValuesChanged}" Value="True">
                <Setter Property="Background" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 谢谢!我会尽快尝试。
    • 一个问题:当我在observationStr的set方法中调用NotifyPropertyChanged(AreValuesChanged)时,它将如何影响ListView中的DataTrigger?如果我没看错的话,我需要实现 INotifyPropertyChanged 接口才能调用 NotifyPropertyChanged,那么我应该在我实现的 NotifyPropertyChanged 版本中做些什么呢?
    • 有几种不同的方式来实现它...请参阅 MSDN 上的 INotifyPropertyChanged Interface 页面。
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多