根据 WPF 中的 bool 标志禁用 DataGridRows

Disable DataGridRows depending on a bool flag in WPF

我想使数据网格中的特定行变灰并禁用。所有将 bool 标志 IsEnabled 设置为 false 的行都应该变灰并禁用编辑。我怎样才能做到这一点?

您可以在下面找到我的示例代码:

MainWindow.xaml

<Window x:Class="WpfApplicationDisableRows.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplicationDisableRows"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
</Window.Resources>
<StackPanel>
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Width="500" Height="250">
        <DataGrid.Columns>
            <DataGridTextColumn FontWeight="Bold" IsReadOnly="True" Width="200" Header="Description" Binding="{Binding Path=Description}"></DataGridTextColumn>
            <DataGridTextColumn FontWeight="Bold" Width="200" Header="Value" Binding="{Binding Path=Value}"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</StackPanel>

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Windows;
using System.Collections.ObjectModel;

namespace WpfApplicationDisableRows
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        ObservableCollection<Row> Rows;
        public MainWindow()
        {
            Rows = new ObservableCollection<Row>();
            AddRows();           
            InitializeComponent();
            this.DataContext = Rows;

        }
        public void AddRows()
        {
            Rows.Add(new Row { Description = "Row1", Value = "A", IsEnabled = true });
            Rows.Add(new Row { Description = "Row2", Value = "B", IsEnabled = false });
            Rows.Add(new Row { Description = "Row3", Value = "C", IsEnabled = true });
        }
    }
}

Row.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApplicationDisableRows
{
    public class Row : INotifyPropertyChanged
    {
        private bool _IsEnabled;
         public event PropertyChangedEventHandler PropertyChanged;
        public string Description { get; set; }
        public string Value { get; set; }
        public bool IsEnabled
        {
            get
            {
                return _IsEnabled;
            }
            set
            {
                _IsEnabled = value;
                OnPropertyChanged(new PropertyChangedEventArgs("IsEnabled"));
            }
        }

        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, e);
        }  
    }
}

Row2 应该变灰并禁止编辑,因为 IsEnabled 为 false

Description = "Row2", Value = "B", IsEnabled = false

Row1 和 Row3 的标志 IsEnabled=true,这些行应该是可编辑的。

Description = "Row1", Value = "A", IsEnabled = true
Description = "Row3", Value = "C", IsEnabled = true

设置 RowStyle 并启用触发器 属性 像这样

<Style TargetType="DataGridRow">
      <Setter Property="IsEnabled" Value="True"/>
      <Style.Triggers>
            <DataTrigger Binding="{Binding IsEnabled}" Value="Fasle">
                 <Setter Property="IsEnabled" Value="False" />
            </DataTrigger>
      </Style.Triggers>
</Style>