using MeterVision.Config; using MeterVision.db; using MeterVision.model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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 MeterVision.Station { /// /// UCVpsGrid.xaml 的交互逻辑 /// public partial class UCVpsGrid : UserControl, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public ObservableCollection StationItemList { get; set; } public event Action OnItemChanged; private VPatchStation _selectedItem; public VPatchStation SelectedItem { get => _selectedItem; set { if(_selectedItem != value) { _selectedItem = value; OnPropertyChanged(nameof(SelectedItem)); OnItemChanged?.Invoke(value); } } } //要查找的站点ID private string _findStationId; public string FindStationId { get => _findStationId; private set { if (_findStationId != value) { _findStationId = value; } } } private string _patchId; public string PatchId { get => _patchId; private set { if (_patchId != value) { _patchId = value; } } } public void ChangeFind(string stationId, string patchId) { bool blChangeFindStationId = false; bool blChangePatchId = false; if (stationId != _findStationId) { FindStationId = stationId; blChangeFindStationId = true; } if (patchId != _patchId) { PatchId = patchId; blChangePatchId = true; } if (blChangeFindStationId || blChangePatchId) { StationPage.InitDefaulValue(); LoadStationItemList(true); } } public CfginiItem mConfigItem { get; set; } public PageModel StationPage { get; set; } private int _totalRecords; public int TotalRecords { get => _totalRecords; set { if (_totalRecords != value) { _totalRecords = value; OnPropertyChanged(nameof(TotalRecords)); } } } public UCVpsGrid() { InitializeComponent(); StationItemList = new ObservableCollection(); dgStation.ItemsSource = StationItemList; mConfigItem = CfginiItem.GetConfigItem(); StationPage = new PageModel { PageSize = mConfigItem.PatchPageSize, PageNumber = 1 }; mConfigItem.OnPatchPageSizeChanged += MConfigItem_OnPatchPageSizeChanged; this.DataContext = this; } private void MConfigItem_OnPatchPageSizeChanged(int pageSize) { StationPage.InitDefaulValue(pageSize); LoadStationItemList(true); } private async void LoadStationItemList(bool scrollTop) { StationItemList.Clear(); if (FindStationId == null) { return; } try { var result = await Task.Run(() => { return DBPatch.GetPagedPatchStations(StationPage.PageNumber, StationPage.PageSize,PatchId); }); //更新分页信息 TotalRecords = result.Item1; StationPage.PageCount = result.Item2; List stationList = result.Item3; //在主线中更新数据 Application.Current.Dispatcher.Invoke(() => { int index = 0; foreach (VPatchStation station in stationList) { index++; //StationItem item = new StationItem(station); //item.Index = index + ((StationPage.PageNumber - 1) * StationPage.PageSize); //StationItemList.Add(item); station.Index = index + ((StationPage.PageNumber - 1) * StationPage.PageSize); } SelectedItem = null; if (StationItemList.Count > 0 && scrollTop) { dgStation.ScrollIntoView(dgStation.Items[0]); } }); } catch (Exception ex) { MessageBox.Show(Application.Current.MainWindow, $"加载数据是发生错误:{ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } SelectedItem = null; } public void NextPage() { if (StationPage.PageNumber < StationPage.PageCount) { StationPage.PageNumber += 1; LoadStationItemList(true); } } public void PrePage() { if (StationPage.PageNumber > 1) { StationPage.PageNumber -= 1; LoadStationItemList(true); } } public void FirstPage() { if (StationPage.PageNumber > 1) { StationPage.PageNumber = 1; LoadStationItemList(true); } } public void LastPage() { if (StationPage.PageNumber < StationPage.PageCount) { StationPage.PageNumber = StationPage.PageCount; LoadStationItemList(true); } } public void SpeciPage(int pageNumber) { if (pageNumber != StationPage.PageNumber && pageNumber > 0 && pageNumber <= StationPage.PageCount) { StationPage.PageNumber = pageNumber; LoadStationItemList(true); } } //--------------------------------------------------------------------- } }