Actualizar el modelo de vista basado en el evento MainWindow
Tengo un UdpClient, activando un evento DataRecevied en mi MainWindow:
public partial class MainWindow : Window
{
public static YakUdpClient ClientConnection = new YakUdpClient();
public ClientData;
public MainWindow()
{
InitializeComponent();
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
ClientData = new ClientData();
ClientConnection.OnDataReceived += ClientConnectionOnDataReceived;
}
private void ClientConnectionOnDataReceived(object sender, MessageEventArgs messageEventArgs)
{
ClientData.Users = messageEvenArgs.ConnectedUsers;
}
}
Mis clases ClientData y Usuario tienen el siguiente aspecto:
public class ClientData
{
public List<User> Users {get;set;)
}
public class User
{
public string Name {get;set;}
}
En mi MainWindow, tengo un UserControl llamadoUserListView
que tiene un ViewModel llamadoUserListViewModel
El ViewModel se ve de la siguiente manera:
public class UserListViewModel: BindableBase
{
public UserListViewModel()
{
//I am sure there are better ways of doing this :(
Users = new ObservableCollection<User>((MainWindow)Application.Current.MainWindow).ClientData.Users
});
private ObservableCollection<User> _users;
public ObservableCollection<User> Users
{
get{ return _users;}
set { this.SetProperty(ref this._users, value); }
}
}
La dificultad que tengo aquí es cuando elClientConnectionOnDataReceived
evento en MainWindow se activa, me gustaría actualizar miClientData
clase, Mi Viewmodel debería ser notificado de alguna manera que la lista cambió, y posteriormente actualizar mi IU.
¿Alguien puede darme un ejemplo sólido de cómo lograr esto usando MVVM (Prism) en WPF?
Soy nuevo en MVVM, así que todavía estoy tratando de resolver esto.