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>
this is mainwindow.xaml.cs
public MainWindow()
{
InitializeComponent();
//ViewModel.PortfolioViewModel vm = new ViewModel.PortfolioViewModel();
this.DataContext = new ViewModel.PortfolioViewModel();
}
PortfolioView is a class implemented in a WCf service
[DataContract]
public class PortfolioView
{
[DataMember]
public string Symbol { get; set; }
[DataMember]
public float Owned { get; set; }
[DataMember]
public float UnitPrice { get; set; }
[DataMember]
public float TotalCoast { get; set; }
[DataMember]
public float MarketPrice { get; set; }
[DataMember]
public float OrderedQuantity { get; set; }
[DataMember]
public float AvailabeAmount { get; set; }
}
I found the solution.Actually, i just created my model(PortfolioView) class in the wpf client side (not from wcf service as i did ).So it worked perfectly. Thank you guys for you help.