Вопрос по c#, wpf, colors – Изменить цвет строки WPF Datagrid

6

У меня есть сетка данных WPF, которая заполнена коллекцией ObserverableCollection.

Теперь я хочу покрасить строки в зависимости от содержимого строки при запуске программы и если что-то изменится во время выполнения.

System.Windows.Controls.DataGrid areaDataGrid = ...;
ObservableCollection<Area> areas;
//adding items to areas collection
areaDataGrid.ItemsSource = areas;

areaDataGrid.Rows  <-- Property not available. how to access rows here?

CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(areaDataGrid.Items);
((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(areaDataGrid_Changed);
...

void areaDataGrid_Changed(object sender, NotifyCollectionChangedEventArgs e)
{
    //how to access changed row here?
}

Как я могу получить доступ к строкам в начале и во время выполнения?

Ваш Ответ

2   ответа
11

ИспользоватьRowStyle, Вы можете использоватьTriggers изменить цвет условно, или просто привязать его кBrush собственности на ваши предметы и измените это свойство соответственно.

5

Чтобы изменить его с помощью кода вместо триггера, он может выглядеть примерно так: Вы можете получить доступ к данным в виде массива, а затем сравнить их. В этом примере я сравниваю 4-й столбец, чтобы увидеть, является ли он больше 0, и 5-й столбец, чтобы увидеть, если он меньше 0, в противном случае просто закрасьте его цветом по умолчанию. Попробуйте / поймайте это там, потому что нужно добавить некоторую логику, чтобы увидеть, является ли она действительной строкой или нет ..... или вы можете просто игнорировать ошибки, как показано ниже (хотя это не очень хорошая практика), но их следует использовать как есть. ,

    private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        try
        {
            if (Convert.ToDouble(((System.Data.DataRowView)(e.Row.DataContext)).Row.ItemArray[3].ToString()) > 0)
            {
                e.Row.Background = new SolidColorBrush(Colors.Green);
            }
            else if (Convert.ToDouble(((System.Data.DataRowView)(e.Row.DataContext)).Row.ItemArray[4].ToString()) < 0)
            {
                e.Row.Background = new SolidColorBrush(Colors.Red);
            }
            else
            {
                e.Row.Background = new SolidColorBrush(Colors.WhiteSmoke);
            }
        }
        catch
        {
        } 
    }

Похожие вопросы