jeudi 16 avril 2020

datagrid column dosen't get updated

I want to change a column values in a datagrid in a random way each 3 sec. I refered to a link from here( Displaying random numbers with a DispatcherTimer ) wish worked when i tested it on a textbox. But it dosen't update the datagrid column cell only when i double click a cell. This is the viewModel, the column i want to change is MarketPrice.

 public class PortfolioViewModel : INotifyPropertyChanged
{
    public Order order;
    private readonly Random random = new Random();
     public PortfolioViewModel()
    {
        this.PortfolioViewObs = PortfolioView();


        var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) };
        timer.Tick += new EventHandler(Timer_Tick);
        timer.Start();

    }

 public ObservableCollection<PortfolioView> PortfolioViewObs
     {
         get;
         set;
     }

 private void Timer_Tick(object sender, EventArgs e)
     {
         for (int i = 0; i < this.PortfolioViewObs.Count; i++)
         {
             this.PortfolioViewObs[i].MarketPrice = random.Next(20, 30);    
         }
     }

This is MainWindow.xaml

 <DataGrid x:Name="PortfolioGrid" ItemsSource="{Binding PortfolioViewObs}" AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="60,32,0,0" VerticalAlignment="Top" Height="196" Width="630">
        <DataGrid.Columns>
            <DataGridTextColumn Width="100" Header="Security" Binding="{Binding Symbol}"/>
            <DataGridTextColumn Width="100" Header="Owned" Binding="{Binding Owned}"/>
            <DataGridTextColumn Width="100" Header="Unit Price" Binding="{Binding UnitPrice}"/>
            <DataGridTextColumn Width="100" Header="Total Cost" Binding="{Binding TotalCoast}"/>
            <DataGridTextColumn Width="100" Header="Market Price" Binding="{Binding MarketPrice}"  />
            <DataGridTextColumn Width="122" Header="Ordered Quantity" Binding="{Binding OrderedQuantity}"/>
        </DataGrid.Columns>
    </DataGrid>



Aucun commentaire:

Enregistrer un commentaire