0

Hey Everyone I am new in WPF trying to learn few things. In dataGrid My grid is not getting updated when I update my dataList my XAML is:

<Window x:Class="DataGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" 
        xmlns:l="clr-namespace:DataGrid" Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ObjectDataProvider x:Key="selectionUnits" 
                        MethodName="GetNames" ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="DataGridSelectionUnit" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
        <ObjectDataProvider x:Key="selectionModes" 
                        MethodName="GetNames" ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="DataGridSelectionMode" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
        <ObjectDataProvider x:Key="headersVisibility" 
                        MethodName="GetNames" ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="DataGridHeadersVisibility" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
        <l:GenderTemplateSelector x:Key="genderTemplateSelector">
            <l:GenderTemplateSelector.MaleTemplate>
                <DataTemplate>
                    <Grid Background="LightBlue">
                        <Image Source="{Binding Image}" Width="50" />
                    </Grid>
                </DataTemplate>
            </l:GenderTemplateSelector.MaleTemplate>
            <l:GenderTemplateSelector.FemaleTemplate>
                <DataTemplate>
                    <Grid Background="Salmon">
                        <Image Source="{Binding Image}" Width="50" />
                    </Grid>
                </DataTemplate>
            </l:GenderTemplateSelector.FemaleTemplate>
        </l:GenderTemplateSelector>
    </Window.Resources>
    <Grid>
        <TabControl TabStripPlacement="Left">
            <TabItem Header="Auto Column Generation">
                <DataGrid ItemsSource="{Binding Customers}" />
            </TabItem>

        </TabControl>
    </Grid>
</Window>

my xaml.cs file is :

public partial class MainWindow : Window
{
    public MainWindow()
    {
       InitializeComponent();
       DataContext = new MainWindowViewModel();
    }
}

 public class MainWindowViewModel
    {
        public ICollectionView Customers { get; private set; }
        public ICollectionView GroupedCustomers { get; private set; }


    public MainWindowViewModel()
    {
        var timer = new System.Timers.Timer();

        timer.Elapsed += timer_Tick;
        timer.Interval = 20000;
        timer.Enabled = true;
        timer.Start();
        AddServices();



    }
    void timer_Tick(object sender, EventArgs e)
    {
        AddServicesTimer();
    }
    public void AddServicesTimer()
    {

        var _customers = new List<Customer>();
        for(int i = 0; i < 5; i++)
        {
           var c = new Customer
            {
                FirstName = "Christian",
                Name = "SrvNameTimer",
                State = "SrvState",
                LastName = "Moser",
                Gender = Gender.Male,
                WebSite = new Uri("http://www.wpftutorial.net"),
                ReceiveNewsletter = true,
                Image = "Images/christian.jpg"
            };
            _customers.Add(c);
        }

        Customers = CollectionViewSource.GetDefaultView(_customers);

        GroupedCustomers = new ListCollectionView(_customers);

    }
    public void AddServices()
    {

        var _customers = new List<Customer>();
        for (int i = 0; i < 5; i++)
        {
            var c = new Customer
            {
                FirstName = "Christian",
                Name = "SrvName",
                State = "SrvState",
                LastName = "Moser",
                Gender = Gender.Male,
                WebSite = new Uri("http://www.wpftutorial.net"),
                ReceiveNewsletter = true,
                Image = "Images/christian.jpg"
            };
            _customers.Add(c);
        }

        Customers = CollectionViewSource.GetDefaultView(_customers);

        GroupedCustomers = new ListCollectionView(_customers);

    }
}

Customer class definition :

public class Customer : INotifyPropertyChanged
    {
        private string _firstName;
        private string _State;
        private string _Name;
        private string _lastName;
        private Gender _gender;
        private Uri _webSite;
        private bool _newsletter;
        private string _image;
    public string FirstName
    {
        get { return _firstName; }
        set 
        {
            _firstName = value;
            NotifyPropertyChanged("FirstName");
        }
    }
    public string State
    {
        get { return _State; }
        set
        {
            _State= value;
            NotifyPropertyChanged("State");
        }
    }
    public string Name
    {
        get { return _Name; }
        set
        {
            _Name = value;
            NotifyPropertyChanged("Name");
        }
    }

    public string LastName
    {
        get { return _lastName; }
        set
        {
            _lastName = value;
            NotifyPropertyChanged("LastName");
        }
    }

    public Gender Gender
    {
        get { return _gender; }
        set
        {
            _gender = value;
            NotifyPropertyChanged("Gender");
        }
    }

    public Uri WebSite
    {
        get { return _webSite; }
        set
        {
            _webSite = value;
            NotifyPropertyChanged("WebSite");
        }
    }

    public bool ReceiveNewsletter
    {
        get { return _newsletter; }
        set
        {
            _newsletter = value;
            NotifyPropertyChanged("Newsletter");
        }
    }

    public string Image
    {
        get { return _image; }
        set
        {
            _image = value;
            NotifyPropertyChanged("Image");
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    #region Private Helpers

    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
}

At the beginning AddServices() method is called. After 20 seconds I call another method named AddServicesTimer() But it is not updating my Grid View it is updating the list but not view. Need help

sunm
  • 1
  • 2
  • Your MainWindowViewModel class should implement the INotifyPropertyChanged interface and fire its PropertyChanged event when the Customer property is set. – Clemens Jun 05 '18 at 10:10
  • Hi Clemens, I tried it but nothing happened. If you have time then can you please add that in code. May be I am doing it wrong. Thanks in anticipation. – sunm Jun 05 '18 at 10:47
  • Why don't you use ObservableCollection instead of ICollectionView?https://stackoverflow.com/questions/4279185/what-is-the-use-of-observablecollection-in-net?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa – Dana Pop Jun 05 '18 at 12:08

0 Answers0