WPF og MVVM begynder spørgsmål
Hej EksperterJeg er begyndt at kigge på WPF og MVVM og har lavet et lille eksempel bare for at rode lidt med det hele, men er løbet ind i et spørgsmål.
Det er nok nemmest hvis jeg lige viser koden
xaml:
<Window x:Class="DataGridUpdateTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="MyDataGrid" HorizontalAlignment="Left" Margin="89,84,0,0" VerticalAlignment="Top" AutoGenerateColumns="True"/>
</Grid>
</Window>
MVVM
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Timers;
namespace DataGridUpdateTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
myViewModel vm = new myViewModel();
MyDataGrid.ItemsSource = vm.getList();
}
}
class myViewModel
{
System.Collections.ObjectModel.ObservableCollection<Car> CarListe;
public myViewModel()
{
CarListe = new System.Collections.ObjectModel.ObservableCollection<Car>();
myModel m = new myModel();
CarListe = m.getList();
}
public System.Collections.ObjectModel.ObservableCollection<Car> getList()
{
return CarListe;
}
}
class myModel
{
System.Collections.ObjectModel.ObservableCollection<Car> privateCarListe;
public myModel()
{
privateCarListe = new System.Collections.ObjectModel.ObservableCollection<Car>();
privateCarListe.Add(new Car("Mazda",4));
privateCarListe.Add(new Car("Mercedes",2));
privateCarListe.Add(new Car("Toyata",1));
}
public System.Collections.ObjectModel.ObservableCollection<Car> getList()
{
return privateCarListe;
}
}
class Car
{
System.Timers.Timer timer;
Random rnd;
public string Maker { get; set; }
public int NumberOfWheels { get; set; }
public Car(string m, int n)
{
Maker = m;
NumberOfWheels = n;
rnd = new Random();
timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
timer.Interval = (1000);
timer.Enabled = true;
timer.Start();
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
NumberOfWheels = rnd.Next(1, 5);
}
}
}
Basalt set handler det om at hvert sekund affyres en timer som ændrer NumberOfWheels..
Hvorfor kan jeg ikke se denne ændring i mit datagrid?
Hvis jeg trykker for at sortere på datagridden, så kan jeg se at den ændrer sig som den skal hvert sekund, men hvorfor "refresher" mit datagrid ikke automatisk, når timeren affyres og den har ændret NumberOfWheels?
Jeg har prøver at lave ovenstående eksempel efter de korrekt MVVM principper, så hvis jeg har misforstået noget, så må I gerne lige sige det :) takker..