using InitializerModel; using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; 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; namespace ConfigEditor.SubPage.EvseConfig { public class FirmwareVersionPaneltemViewModel : FirmwareUpdateModel, INotifyPropertyChanged { public FirmwareVersionPaneltemViewModel(FirmwareUpdateModel from) { this.Module = from.Module; this.Version = from.Version; this.FirmwareFileName = from.FirmwareFileName; this.DisplayFileName = System.IO.Path.GetFileName(FirmwareFileName); } public string DisplayFileName { get; set; } public event PropertyChangedEventHandler PropertyChanged; internal FirmwareUpdateModel GetFirmwareUpdateModel() { return new FirmwareUpdateModel() { Module = this.Module, Version = this.Version, FirmwareFileName = this.FirmwareFileName, }; } public void TriggerPropertyChanged() { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Module))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Version))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FirmwareFileName))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DisplayFileName))); } } /// /// FirmwareVersionPaneltem.xaml 的互動邏輯 /// public partial class FirmwareVersionPaneltem : UserControl { //private FirmwareUpdateModel firmware; public FirmwareVersionPaneltem(string fileFolderPath, int evseIndex) { InitializeComponent(); var firmware = new FirmwareUpdateModel(); Init(); //this.firmware = firmware; this.evseIndex = evseIndex; //this.DataContext = firmware; this.ViewModel = new FirmwareVersionPaneltemViewModel(firmware); this.DataContext = this.ViewModel; } public FirmwareVersionPaneltem(string fileFolderPath, FirmwareUpdateModel firmware, int evseIndex) { InitializeComponent(); Init(); this.fileFolderPath = fileFolderPath; //this.firmware = firmware; this.evseIndex = evseIndex; this.ViewModel = new FirmwareVersionPaneltemViewModel(firmware); this.DataContext = ViewModel; } public FirmwareUpdateModel GetModel() { var toReturn = new FirmwareUpdateModel(); toReturn.Module = ViewModel?.Module; toReturn.Version = ViewModel?.Version; toReturn.FirmwareFileName = ViewModel?.FirmwareFileName; if (string.IsNullOrEmpty(toReturn.Module) || string.IsNullOrEmpty(toReturn.Version)) { return null; } return toReturn; } private void Init() { PredefinedVersions = PredefinedVersionPair.GetWebNames(); var selectionList = PredefinedVersions.Append(customizedString); this.uxPredefinedFrimware.ItemsSource = selectionList; //fileSourcePath = firmware.FirmwareFileName; //firmware.DisplayFileName = System.IO.Path.GetFileName(firmware.FirmwareFileName); } public event EventHandler OnDeleteClicked; public FirmwareUpdateModel FrimwareModel => ViewModel.GetFirmwareUpdateModel(); private string customizedString = "Customized"; private IEnumerable PredefinedVersions; private FirmwareVersionPaneltemViewModel ViewModel; private readonly string fileFolderPath; private readonly int evseIndex; private void uxPredefinedFrimware_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selectedItem = uxPredefinedFrimware.SelectedItem as string; if (selectedItem == customizedString) { return; } if (PredefinedVersions.Contains(selectedItem)) { var indexedApiVersion = EvseVersion.GetDDApiNameFromWebName(selectedItem, evseIndex); ViewModel.Module = indexedApiVersion; //uxFrimwareKey.Text = indexedApiVersion; ViewModel.TriggerPropertyChanged(); //ReloadViewModel(); } //uxFrimwareKey.Text = } private void uxFrimwareKey_TextChanged(object sender, TextChangedEventArgs e) { var versionKey = uxFrimwareKey.Text; var apiName = EvseVersion.GetApiNameFromDDApiName(versionKey); var webName = PredefinedVersionPair.GetWebName(apiName); if (PredefinedVersions.Contains(webName)) { uxPredefinedFrimware.SelectedItem = webName; } else { uxPredefinedFrimware.SelectedItem = customizedString; } } private void Delete_Click(object sender, RoutedEventArgs e) { OnDeleteClicked?.Invoke(this, null); } private void ReloadViewModel() { this.DataContext = null; this.DataContext = ViewModel; } private void File_MouseUp(object sender, MouseButtonEventArgs e) { if (!(sender is TextBox textBox)) { return; } var dlg = new OpenFileDialog(); try { dlg.InitialDirectory = fileFolderPath; dlg.FileName = ViewModel.DisplayFileName; } catch { } var dlgResult = dlg.ShowDialog(); if (dlgResult == true) { //TryUpdateFile(dlg.FileName); ViewModel.FirmwareFileName = dlg.FileName; ViewModel.DisplayFileName = System.IO.Path.GetFileName(dlg.FileName); this.DataContext = null; this.DataContext = ViewModel; } } //private void TryUpdateFile(string fullFilePath) //{ // string folderPath = System.IO.Path.GetDirectoryName(fullFilePath); // string fileName = System.IO.Path.GetFileName(fullFilePath); // if (folderPath == fileFolderPath) // { // firmware.FirmwareFileName = fileName; // this.DataContext = null; // this.DataContext = firmware; // return; // } // var targetFilePath = System.IO.Path.Combine(fileFolderPath, fileName); // if (System.IO.File.Exists(targetFilePath)) // { // MessageBox.Show("file existed"); // return; // } // System.IO.File.Copy(fullFilePath, targetFilePath) ; // firmware.FirmwareFileName = fileName; // this.DataContext = null; // this.DataContext = firmware; //} } }