INotifyPropertyChanged not запускает DataTriggers, когда коллекция заполнена SqlDataReader - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть класс Person с 3 свойствами, который реализует INotifyPropertyChanged

    public class Person:INotifyPropertyChanged
{
    private string name;
    public int ID { get; set; }
    public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } }
    public int Age { get; set; }


    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyname)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyname));
        }
    }
}

Я заполняю ObservableCollection этого класса, используя SqlDataReader:

        private void ReadFromDB()
    {
        using (SqlConnection con = new SqlConnection(ConnectionString))
        {
           // Reading from SQL server...
            while (reader.Read())
            {
                Person pr = new Person();
                pr.ID = reader.GetInt32(0);
                pr.Name = reader.GetString(1);
                pr.Age = reader.GetInt32(2);
                people.Add(pr);
            }
            con.Close();
        }
    }

И загрузка данных на DataGrid:

        public Window1()
    {
        InitializeComponent();
        ReadFromDB();
        dataGrid1.ItemsSource = people;
    }

И, наконец, у меня есть настройка DataTriggers для изменения DataGridRow при появлении имени:

            <DataGrid AutoGenerateColumns="True" Height="253" HorizontalAlignment="Left" Margin="6,6,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="740" ItemsSource="{Binding}">
            <DataGrid.RowStyle>
                <Style TargetType="DataGridRow">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Name}" Value="SomePerson">
                            <Setter Property="Background" Value="Green"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowStyle>
        </DataGrid>

Проблема в том, что DataTriggers не запускается автоматически при открытии окна. Если я поменяю имя вручную на самом DataGrid, DataTriggers сработает и RowStyle изменится правильно. Как я могу DataTriggers реагировать на значения в моей коллекции? Спасибо

...