























//WCF using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WcfService1 { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IBookService" in both code and config file together. [ServiceContract] public interface IBookService { [OperationContract] List<Book> GetBooksList(int cnt); } [DataContract] public class Book { [DataMember] public long Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string ISBN { get; set; } [DataMember] public string Author { get; set; } [DataMember] public string Abstract { get; set; } [DataMember] public string Comment { get; set; } [DataMember] public string Content { get; set; } [DataMember] public string Summary { get; set; } [DataMember] public string Title { get; set; } [DataMember] public string Topic { get; set; } public override string ToString() { return $"Id:{Id},Name:{Name},Author:{Author},ISBN:{ISBN}"; } } } using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Threading; namespace WcfService1 { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "BookService" in code, svc and config file together. // NOTE: In order to launch WCF Test Client for testing this service, please select BookService.svc or BookService.svc.cs at the Solution Explorer and start debugging. public class BookService : IBookService { private static long idx = 0; private long GetIncrementIdx() { return Interlocked.Increment(ref idx); } public List<Book> GetBooksList(int cnt = 10000000) { List<Book> booksList = new List<Book>(); for (int i = 0; i < cnt; i++) { long a = GetIncrementIdx(); booksList.Add(new Book() { Id = a, Name = $"Name_{a}", Author = $"Author_{a}", Abstract = $"Abstract_{a}", ISBN = $"ISBN_{a}", Comment = $"Comment_{a}", Content = $"Content_{a}", Summary = $"Summary_{a}", Title = $"Title_{a}", Topic = $"Topic_{a}" }); } return booksList; } } } //WPF <Window x:Class="WpfApp25.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp25" mc:Ignorable="d" Title="{Binding MainTitle}" WindowState="Maximized"> <Window.DataContext> <local:MainVM/> </Window.DataContext> <Grid> <DataGrid ItemsSource="{Binding BooksCollection}" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.CacheLength="5,5" VirtualizingPanel.CacheLengthUnit="Item" ScrollViewer.CanContentScroll="True" ScrollViewer.IsDeferredScrollingEnabled="True" UseLayoutRounding="True" SnapsToDevicePixels="True" EnableColumnVirtualization="True" EnableRowVirtualization="True" AutoGenerateColumns="True" CanUserAddRows="False" > <DataGrid.Resources> <Style TargetType="DataGridRow"> <Setter Property="FontSize" Value="20"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="FontSize" Value="30"/> <Setter Property="Foreground" Value="Red"/> </Trigger> </Style.Triggers> </Style> </DataGrid.Resources> </DataGrid> </Grid> </Window> using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Text; 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.Windows.Threading; using WcfService1; namespace WpfApp25 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class MainVM : INotifyPropertyChanged { private DispatcherTimer tmr; private BookService bkService; public MainVM() { bkService=new BookService(); tmr=new DispatcherTimer(); InitBooksCollection(); tmr.Interval = TimeSpan.FromSeconds(20); tmr.Tick += Tmr_Tick; tmr.Start(); } private void Tmr_Tick(object? sender, EventArgs e) { InitBooksCollection(); } private void InitBooksCollection() { BooksCollection = new ObservableCollection<Book>(bkService.GetBooksList()); MainTitle = $"{DateTime.Now},First Id:{BooksCollection.FirstOrDefault().Id},Last Id:{BooksCollection.LastOrDefault().Id}"; } private string mainTitle=$"{DateTime.Now},loading..."; public string MainTitle { get { return mainTitle; } set { if (value != mainTitle) { mainTitle = value; OnPropertyChanged(); } } } private ObservableCollection<Book> booksCollection; public ObservableCollection<Book> BooksCollection { get { return booksCollection; } set { if(value!=booksCollection) { booksCollection = value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged([CallerMemberName]string propertyName="") { var handler = PropertyChanged; handler?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }



此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。