using System.ComponentModel; using System.Reflection; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Media; namespace TeamsNetphoneLink.WPF.MVVM { public static class StatusPanelNames { public const string TeamsLocalAPIStatus = nameof(TeamsLocalAPIStatus); public const string TeamsGraphAPIStatus = nameof(TeamsGraphAPIStatus); public const string NetphoneCLMGRStatus = nameof(NetphoneCLMGRStatus); public const string TeamsMeetingStatus = nameof(TeamsMeetingStatus); public const string NetphoneCallStatus = nameof(NetphoneCallStatus); } public class DashboardViewModel : INotifyPropertyChanged { // Parameterloser Konstruktor public DashboardViewModel() { // Initialisieren Sie hier Standardwerte, falls erforderlich TeamsLocalAPIStatusText = "Nicht verbunden"; TeamsLocalAPIStatusBackground = new SolidColorBrush(Colors.Red); TeamsGraphAPIStatusText = "Konfiguration fehlt"; TeamsGraphAPIStatusBackground = new SolidColorBrush(Colors.Red); NetphoneCLMGRStatusText = "Nicht verbunden"; NetphoneCLMGRStatusBackground = new SolidColorBrush(Colors.Red); TeamsMeetingStatusText = "Not Active"; TeamsMeetingStatusBackground = new SolidColorBrush(Colors.DarkOrange); NetphoneCallStatusText = "Not Active"; NetphoneCallStatusBackground = new SolidColorBrush(Colors.DarkOrange); AppTitle2 = "Teams Netphone Link"; VersionText = "Aktuell"; VersionVisibility = Visibility.Visible; VersionBackground = new SolidColorBrush(Colors.Green); } private string _appTitle; private string _versionText; private Visibility _versionVisibility; private Brush _versionBackground; private string _teamsLocalAPIStatusText; private Brush _teamsLocalAPIStatusBackground; private string _teamsGraphAPIStatusText; private Brush _teamsGraphAPIStatusBackground; private string _netphoneCLMGRStatusText; private Brush _netphoneCLMGRStatusBackground; private string _teamsMeetingStatusText; private Brush _teamsMeetingStatusBackground; private string _netphoneCallStatusText; private Brush _netphoneCallStatusBackground; public string TeamsLocalAPIStatusText { get => _teamsLocalAPIStatusText; set { _teamsLocalAPIStatusText = value; OnPropertyChanged(); } } public Brush TeamsLocalAPIStatusBackground { get => _teamsLocalAPIStatusBackground; set { _teamsLocalAPIStatusBackground = value; OnPropertyChanged(); } } public string TeamsGraphAPIStatusText { get => _teamsGraphAPIStatusText; set { _teamsGraphAPIStatusText = value; OnPropertyChanged(); } } public Brush TeamsGraphAPIStatusBackground { get => _teamsGraphAPIStatusBackground; set { _teamsGraphAPIStatusBackground = value; OnPropertyChanged(); } } public string NetphoneCLMGRStatusText { get => _netphoneCLMGRStatusText; set { _netphoneCLMGRStatusText = value; OnPropertyChanged(); } } public Brush NetphoneCLMGRStatusBackground { get => _netphoneCLMGRStatusBackground; set { _netphoneCLMGRStatusBackground = value; OnPropertyChanged(); } } public string TeamsMeetingStatusText { get => _teamsMeetingStatusText; set { _teamsMeetingStatusText = value; OnPropertyChanged(); } } public Brush TeamsMeetingStatusBackground { get => _teamsMeetingStatusBackground; set { _teamsMeetingStatusBackground = value; OnPropertyChanged(); } } public string NetphoneCallStatusText { get => _netphoneCallStatusText; set { _netphoneCallStatusText = value; OnPropertyChanged(); } } public Brush NetphoneCallStatusBackground { get => _netphoneCallStatusBackground; set { _netphoneCallStatusBackground = value; OnPropertyChanged(); } } public string AppTitle2 { get => _appTitle; set { Application.Current.Dispatcher.InvokeAsync(() => { _appTitle = value; OnPropertyChanged(); }); } } public string VersionText { get => _versionText; set { Application.Current.Dispatcher.InvokeAsync(() => { _versionText = value; OnPropertyChanged(); }); } } public Visibility VersionVisibility { get => _versionVisibility; set { Application.Current.Dispatcher.InvokeAsync(() => { _versionVisibility = value; OnPropertyChanged(); }); } } public Brush VersionBackground { get => _versionBackground; set { Application.Current.Dispatcher.InvokeAsync(() => { _versionBackground = value; OnPropertyChanged(); }); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } // Method to update status panel public void UpdateStatusPanel(string statusPanelName, Color color, string text) { Application.Current.Dispatcher.InvokeAsync(() => { // Get the type of the ViewModel var type = GetType(); // Construct property names for Text and Background string textPropertyName = $"{statusPanelName}Text"; string backgroundPropertyName = $"{statusPanelName}Background"; // Get the properties using reflection PropertyInfo textProperty = type.GetProperty(textPropertyName); //CS8600 PropertyInfo backgroundProperty = type.GetProperty(backgroundPropertyName); //CS8600 if (textProperty != null && backgroundProperty != null) { // Update the Text property textProperty.SetValue(this, text); // Update the Background property backgroundProperty.SetValue(this, new SolidColorBrush(color)); } else { throw new ArgumentException($"Invalid status panel name: {statusPanelName}"); } }); } } }