根据WPF中的bool标志禁用DataGridRows

时间:2015-01-17 09:04:57

标签: c# wpf wpfdatagrid

我想灰显并禁用datagrid中的特定行。将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

1 个答案:

答案 0 :(得分:0)

制作RowStyle和Trigger IsEnabled属性 喜欢这个

<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>