实例介绍
ReactiveProperty提供了在Reactive Extensions下的MVVM和异步支持功能。目标框架是.NET 6.0 、.NET Framework 4.7.2和.NET Standard 2.0。
注意:如果您正在开发新应用程序,请考虑使用R3而不是ReactiveProperty。由原作者重新设计的R3与当前的.NET生态系统保持一致,并提供了大多数ReactiveProperty中的功能。
概念
ReactiveProperty是一个非常强大而简单的库。
这个示例应用的ViewModel代码如下:
public class MainPageViewModel { public ReactivePropertySlim<string> Input { get; } public ReadOnlyReactivePropertySlim<string> Output { get; } public MainPageViewModel() { Input = new ReactivePropertySlim<string>(""); Output = Input .Delay(TimeSpan.FromSeconds(1)) .Select(x => x.ToUpper()) .ObserveOnDispatcher() .ToReadOnlyReactivePropertySlim(); } }
【实例截图】
文件清单
└── ReactiveProperty-5d8af227dd70af09a4d7205470a11bce3976a4ff
├── Assets
│ ├── Asset.pptx
│ ├── (JPN)Session_SilverlightSquareInTokyo4.pptx
│ ├── ReactivePropertyIcon_100x100.png
│ └── ReactivePropertyIcon_511x511.png
├── Benchmark
│ ├── Benchmark.Current
│ │ ├── BasicUsages.v9.cs
│ │ └── Benchmark.Current.csproj
│ ├── Benchmark.V6
│ │ ├── BasicUsages.cs
│ │ ├── Benchmark.V6.csproj
│ │ └── Program.cs
│ ├── Benchmark.V7
│ │ └── Benchmark.V7.csproj
│ ├── FromEventBenchmark.Rp
│ │ └── FromEventBenchmark.Rp.csproj
│ ├── FromEventBenchmark.Rx
│ │ ├── FromEventBenchmark.Rx.csproj
│ │ └── Program.cs
│ └── ReactiveProperty-Benchmark.sln
├── docs
│ ├── deploy.ps1
│ ├── deploy.sh
│ ├── docs
│ │ ├── advanced
│ │ │ ├── awaitable.md
│ │ │ ├── images
│ │ │ │ ├── create-project.png
│ │ │ │ └── hello-world.gif
│ │ │ ├── thread.md
│ │ │ └── work-with-other-mvvm-framwork.md
│ │ ├── features
│ │ │ ├── Collections.md
│ │ │ ├── Commanding.md
│ │ │ ├── Event-transfer-to-ViewModel-from-View.md
│ │ │ ├── Extension-methods.md
│ │ │ ├── images
│ │ │ │ ├── asyncreactivecommand-from-iobool.gif
│ │ │ │ ├── asyncreactivecommand-heavyprocess.gif
│ │ │ │ ├── asyncreactivecommand-shared-source.gif
│ │ │ │ ├── asyncreactivecommand-share-state.gif
│ │ │ │ ├── collections-filtered-collection.gif
│ │ │ │ ├── collections-reactivecollection-basic-usage.gif
│ │ │ │ ├── collections-reactivecollection-collection-operations.gif
│ │ │ │ ├── collections-reactivecollection-readonly-collection.gif
│ │ │ │ ├── collections-reactivecollection-readonly-collection-reset.gif
│ │ │ │ ├── event-to-reactivexxx.gif
│ │ │ │ ├── haserrors-handling2.png
│ │ │ │ ├── haserrors-handling.png
│ │ │ │ ├── reactivecommand-disable5secs.gif
│ │ │ │ ├── reactivecommand-firstexample.gif
│ │ │ │ ├── validation-errormessage.png
│ │ │ │ ├── work-together-with-poco-two-way-synchronization-and-convert.gif
│ │ │ │ ├── work-together-with-poco-two-way-synchronization-and-ignoreValidationError.gif
│ │ │ │ ├── work-together-with-poco-two-way-synchronization.gif
│ │ │ │ └── wpf-validation.png
│ │ │ ├── Notifiers.md
│ │ │ ├── ReactiveProperty.md
│ │ │ ├── ReactivePropertySlim.md
│ │ │ └── Work-together-with-plane-model-layer-objects.md
│ │ ├── getting-started
│ │ │ ├── add-snippets.md
│ │ │ ├── avalonia.md
│ │ │ ├── blazor.md
│ │ │ ├── images
│ │ │ │ ├── blazor-helloworld.png
│ │ │ │ ├── launch-avalonia-app.gif
│ │ │ │ ├── launch-uwp-app.gif
│ │ │ │ ├── launch-wpf-app.gif
│ │ │ │ ├── launch-xf-app-android.gif
│ │ │ │ ├── launch-xf-app-uwp.gif
│ │ │ │ ├── unoandroid-getting-started.gif
│ │ │ │ ├── unouwp-getting-started.gif
│ │ │ │ ├── uwp-target-version.png
│ │ │ │ ├── wasm-getting-started.gif
│ │ │ │ └── xf-create-project.png
│ │ │ ├── uno-platform.md
│ │ │ ├── uwp.md
│ │ │ ├── wpf.md
│ │ │ └── xf.md
│ │ ├── images
│ │ │ ├── launch-uwp-app.gif
│ │ │ ├── rpsummary.png
│ │ │ ├── sampleapp.gif
│ │ │ ├── todoapp.gif
│ │ │ └── todomvvm.png
│ │ ├── README.md
│ │ └── samples.md
│ ├── package.json
│ └── package-lock.json
├── Images
│ ├── basics.png
│ ├── delay.png
│ ├── error1.png
│ ├── error2.png
│ ├── EventToReactiveCommand1.PNG
│ ├── EventToReactiveCommand2.PNG
│ ├── eventtoreactive.PNG
│ ├── helloworld-winui.gif
│ ├── installrp.PNG
│ ├── interval.png
│ ├── launch-uwp-app.gif
│ ├── reactivecommand1.png
│ ├── reactivecommand2.png
│ ├── removenugetpackage.png
│ ├── removewinandwpproject.PNG
│ ├── rpsummary.png
│ ├── synchronize.png
│ ├── targetnetplatformstandard.png
│ ├── todomvvm.png
│ ├── upgradexf.png
│ ├── validation.PNG
│ ├── xf-howtouserp-createproject-en.png
│ └── xf-howtouserp-createproject.png
├── LICENSE.txt
├── ReactiveProperty-Samples.sln
├── ReactiveProperty.sln
├── README-Android.md
├── README-ja.md
├── README.md
├── ReleaseNote-ja.md
├── ReleaseNote.md
├── Samples
│ ├── Blazor
│ │ ├── BlazorSample
│ │ │ ├── BlazorSample
│ │ │ │ ├── appsettings.Development.json
│ │ │ │ ├── appsettings.json
│ │ │ │ ├── BlazorSample.csproj
│ │ │ │ ├── Components
│ │ │ │ │ ├── App.razor
│ │ │ │ │ ├── _Imports.razor
│ │ │ │ │ ├── Layout
│ │ │ │ │ │ ├── MainLayout.razor
│ │ │ │ │ │ ├── MainLayout.razor.css
│ │ │ │ │ │ ├── NavMenu.razor
│ │ │ │ │ │ └── NavMenu.razor.css
│ │ │ │ │ ├── Pages
│ │ │ │ │ │ ├── Error.razor
│ │ │ │ │ │ ├── Home.razor
│ │ │ │ │ │ ├── ServerCounter.razor
│ │ │ │ │ │ ├── ServerHelloWorld.razor
│ │ │ │ │ │ └── SSRHelloWorld.razor
│ │ │ │ │ └── Routes.razor
│ │ │ │ ├── Program.cs
│ │ │ │ ├── Properties
│ │ │ │ │ └── launchSettings.json
│ │ │ │ └── wwwroot
│ │ │ │ ├── app.css
│ │ │ │ ├── bootstrap
│ │ │ │ │ ├── bootstrap.min.css
│ │ │ │ │ └── bootstrap.min.css.map
│ │ │ │ └── favicon.png
│ │ │ └── BlazorSample.Client
│ │ │ ├── BlazorSample.Client.csproj
│ │ │ ├── Components
│ │ │ │ ├── Counter.razor
│ │ │ │ ├── HelloWorld.razor
│ │ │ │ └── Pages
│ │ │ │ ├── WasmCounter.razor
│ │ │ │ └── WasmHelloWorld.razor
│ │ │ ├── _Imports.razor
│ │ │ ├── Program.cs
│ │ │ ├── ViewModels
│ │ │ │ ├── CounterViewModel.cs
│ │ │ │ ├── HelloWorldViewModel.cs
│ │ │ │ └── ValidationViewModel.cs
│ │ │ └── wwwroot
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── BlazorSample.Shared
│ │ ├── BlazorSample.Shared.csproj
│ │ ├── _Imports.razor
│ │ ├── Pages
│ │ │ ├── Counter.razor
│ │ │ └── Index.razor
│ │ └── ViewModels
│ │ ├── CounterViewModel.cs
│ │ ├── HelloWorldViewModel.cs
│ │ └── ValidationViewModel.cs
│ ├── MultiUIThreadApp
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Models
│ │ │ ├── GuidList.cs
│ │ │ └── Item.cs
│ │ ├── MultiUIThreadApp.csproj
│ │ ├── ViewModels
│ │ │ ├── ListBoxWindowViewModel.cs
│ │ │ ├── MainWindowViewModel.cs
│ │ │ └── ViewModelBase.cs
│ │ └── Views
│ │ ├── ListBoxWindow.xaml
│ │ ├── ListBoxWindow.xaml.cs
│ │ ├── MainWindow.xaml
│ │ └── MainWindow.xaml.cs
│ ├── ReactivePropertyCoreSample.WPF
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Behaviors
│ │ │ └── DisposeViewModelWhenClosedBehavior.cs
│ │ ├── Messages
│ │ │ └── ShowWindowMessage.cs
│ │ ├── Models
│ │ │ ├── BindableBase.cs
│ │ │ └── Poco.cs
│ │ ├── ReactivePropertyCoreSample.WPF.csproj
│ │ ├── ViewModels
│ │ │ ├── BasicUsagesWindowViewModel.cs
│ │ │ ├── CreateFromPocoViewModel.cs
│ │ │ ├── MainWindowViewModel.cs
│ │ │ ├── ReactiveCommandViewModel.cs
│ │ │ ├── ValidationViewModel.cs
│ │ │ └── ViewModelBase.cs
│ │ └── Views
│ │ ├── BasicUsagesWindow.xaml
│ │ ├── BasicUsagesWindow.xaml.cs
│ │ ├── CreateFromPocoWindow.xaml
│ │ ├── CreateFromPocoWindow.xaml.cs
│ │ ├── MainWindow.xaml
│ │ ├── MainWindow.xaml.cs
│ │ ├── ReactiveCommandWindow.xaml
│ │ ├── ReactiveCommandWindow.xaml.cs
│ │ ├── ValidationWindow.xaml
│ │ └── ValidationWindow.xaml.cs
│ ├── ReactivePropertySamples.Shared
│ │ ├── Models
│ │ │ ├── BindableBase.cs
│ │ │ ├── CollectionsModel.cs
│ │ │ └── Poco.cs
│ │ ├── ReactivePropertySamples.Shared.csproj
│ │ └── ViewModels
│ │ ├── BasicUsagesViewModel.cs
│ │ ├── CollectionsViewModel.cs
│ │ ├── CreateFromPocoViewModel.cs
│ │ ├── EventToReactiveViewModel.cs
│ │ ├── ReactiveCommandViewModel.cs
│ │ ├── ValidationViewModel.cs
│ │ └── ViewModelBase.cs
│ ├── ReactivePropertySamples.WPF
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Behaviors
│ │ │ └── DisposeViewModelWhenClosedBehavior.cs
│ │ ├── Converters
│ │ │ ├── MouseEventConverter.cs
│ │ │ └── OpenFileConverter.cs
│ │ ├── ReactivePropertySamples.WPF.csproj
│ │ └── Views
│ │ ├── BasicUsagesWindow.xaml
│ │ ├── BasicUsagesWindow.xaml.cs
│ │ ├── CollectionsWindow.xaml
│ │ ├── CollectionsWindow.xaml.cs
│ │ ├── CreateFromPocoWindow.xaml
│ │ ├── CreateFromPocoWindow.xaml.cs
│ │ ├── EventToReactiveWindow.xaml
│ │ ├── EventToReactiveWindow.xaml.cs
│ │ ├── MainWindow.xaml
│ │ ├── MainWindow.xaml.cs
│ │ ├── ReactiveCommandWindow.xaml
│ │ ├── ReactiveCommandWindow.xaml.cs
│ │ ├── ValidationWindow.xaml
│ │ └── ValidationWindow.xaml.cs
│ ├── Reactive.Todo
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── Reactive.Todo.csproj
│ │ ├── ViewModels
│ │ │ └── MainWindowViewModel.cs
│ │ └── Views
│ │ ├── MainWindow.xaml
│ │ └── MainWindow.xaml.cs
│ └── Reactive.Todo.Main
│ ├── Converters
│ │ ├── BooleanToTextDecorationCollectionConverter.cs
│ │ ├── EnterKeyEventFilter.cs
│ │ └── TargetViewTypeToThicknessConverter.cs
│ ├── Events
│ │ └── TargetViewChangedEvent.cs
│ ├── MainModule.cs
│ ├── Models
│ │ ├── TodoApp.cs
│ │ └── TodoItem.cs
│ ├── Reactive.Todo.Main.csproj
│ ├── ViewModels
│ │ ├── CommandsViewModel.cs
│ │ ├── InputViewModel.cs
│ │ ├── TodoItemsViewModel.cs
│ │ └── ViewModelBase.cs
│ └── Views
│ ├── CommandsView.xaml
│ ├── CommandsView.xaml.cs
│ ├── InputView.xaml
│ ├── InputView.xaml.cs
│ ├── TodoItemsView.xaml
│ └── TodoItemsView.xaml.cs
├── Snippet
│ ├── csharp5
│ │ ├── AsyncReactiveCommandGeneric.snippet
│ │ ├── AsyncReactiveCommand.snippet
│ │ ├── ReactiveCollection.snippet
│ │ ├── ReactiveCommandGeneric.snippet
│ │ ├── ReactiveCommand.snippet
│ │ ├── ReactivePropertySlim.snippet
│ │ ├── ReactiveProperty.snippet
│ │ ├── ReadOnlyReactiveCollection.snippet
│ │ ├── ReadOnlyReactivePropertySlim.snippet
│ │ └── ReadOnlyReactiveProperty.snippet
│ └── csharp6
│ ├── AsyncReactiveCommandGeneric.snippet
│ ├── AsyncReactiveCommand.snippet
│ ├── ReactiveCollection.snippet
│ ├── ReactiveCommandGeneric.snippet
│ ├── ReactiveCommand.snippet
│ ├── ReactivePropertySlim.snippet
│ ├── ReactiveProperty.snippet
│ ├── ReadOnlyReactiveCollection.snippet
│ ├── ReadOnlyReactivePropertySlim.snippet
│ └── ReadOnlyReactiveProperty.snippet
├── Source
│ ├── Directory.Build.props
│ ├── ReactiveProperty.Core
│ │ ├── AsyncReactiveCommand.cs
│ │ ├── Disposables
│ │ │ └── CompositeDisposable.cs
│ │ ├── Extensions
│ │ │ ├── IDisposableExtensions.cs
│ │ │ └── INotifyPropertyChangedExtensions.cs
│ │ ├── IHasErrors.cs
│ │ ├── Internals
│ │ │ ├── AccessorCache.cs
│ │ │ ├── DelegateDisposable.cs
│ │ │ ├── DelegateObserver.cs
│ │ │ ├── Disposable.cs
│ │ │ ├── ExpressionTreeUtils.cs
│ │ │ ├── ImmutableList.cs
│ │ │ ├── InternalSubject.cs
│ │ │ ├── InternalVisibleTo.cs
│ │ │ ├── IObserverLinkedList.cs
│ │ │ ├── NestedPropertyObservable.cs
│ │ │ ├── ObserverNode.cs
│ │ │ ├── PropertyChangedObservable.cs
│ │ │ ├── PropertyObservable.cs
│ │ │ ├── PropertyPathNode.cs
│ │ │ ├── SimplePropertyObservable.cs
│ │ │ └── SingletonPropertyChangedEventArgs.cs
│ │ ├── IReactiveProperty.cs
│ │ ├── IReadOnlyReactiveProperty.cs
│ │ ├── key.snk
│ │ ├── Notifiers
│ │ │ ├── BooleanNotifier.cs
│ │ │ ├── BusyNotifier.cs
│ │ │ ├── CountNotifier.cs
│ │ │ └── MessageBroker.cs
│ │ ├── ReactiveCommandSlim.cs
│ │ ├── ReactiveProperty.Core.csproj
│ │ ├── ReactivePropertyMode.cs
│ │ ├── ReactivePropertySlim.cs
│ │ ├── TinyLinq
│ │ │ └── ObservableExtensions.cs
│ │ └── ValidatableReactiveProperty.cs
│ ├── ReactiveProperty.NETStandard
│ │ ├── Binding
│ │ │ ├── RxBindingExtensions.cs
│ │ │ └── RxCommandExtensions.cs
│ │ ├── Compatibilities
│ │ │ └── IsExternalInit.cs
│ │ ├── Extensions
│ │ │ ├── CatchIgnoreObservableExtensions.cs
│ │ │ ├── CombineLatestEnumerableExtensions.cs
│ │ │ ├── DisposePreviousValueExtensions.cs
│ │ │ ├── ICommandExtensions.cs
│ │ │ ├── INotifyCollectionChangedExtensions.cs
│ │ │ ├── INotifyDataErrorInfoExtensions.cs
│ │ │ ├── INotifyPropertyChangedExtensions.cs
│ │ │ ├── InverseObservableExtensions.cs
│ │ │ ├── ObservableCollectionExtensions.cs
│ │ │ ├── OldNewPair.cs
│ │ │ ├── PairwiseObservableExtensions.cs
│ │ │ ├── PropertyPack.cs
│ │ │ ├── RetryObservableExtensions.cs
│ │ │ ├── SenderEventArgsPair.cs
│ │ │ ├── ToUnitObservableExtensions.cs
│ │ │ └── UIDispatcherSchedulerObservableExtensions.cs
│ │ ├── Helpers
│ │ │ ├── CollectionUtilities.cs
│ │ │ ├── FilteredReadOnlyObservableCollection.cs
│ │ │ └── FilteredReadOnlyObservableCollectionExtensions.cs
│ │ ├── Interactivity
│ │ │ ├── DelegateConverter.cs
│ │ │ ├── IEventToReactiveConverter.cs
│ │ │ └── ReactiveConverter.cs
│ │ ├── Internals
│ │ │ ├── InternalObservable.cs
│ │ │ ├── InternalVisibleTo.cs
│ │ │ ├── PropertyObservableLegacy.cs
│ │ │ └── PropertyPathNodeLegacy.cs
│ │ ├── key.snk
│ │ ├── Notifiers
│ │ │ ├── BooleanNotifierLegacy.cs
│ │ │ ├── BusyNotifierLegacy.cs
│ │ │ ├── CountNotifierLegacy.cs
│ │ │ ├── MessageBrokerLegacy.cs
│ │ │ └── ScheduledNotifier.cs
│ │ ├── ObservableAsyncHandler.cs
│ │ ├── ObservableEx.cs
│ │ ├── ReactiveCollection.cs
│ │ ├── ReactiveCommand.cs
│ │ ├── ReactiveProperty.cs
│ │ ├── ReactivePropertyExtensions.cs
│ │ ├── ReactiveProperty.NETStandard.csproj
│ │ ├── ReactivePropertyScheduler.cs
│ │ ├── ReactiveTimer.cs
│ │ ├── ReadOnlyReactiveCollection.cs
│ │ ├── ReadOnlyReactiveProperty.cs
│ │ └── UIDispatcherScheduler.cs
│ ├── ReactiveProperty.Platform.Android
│ │ ├── BindingSupportExtensions.cs
│ │ ├── Extensions
│ │ │ └── ViewEventExtensions.cs
│ │ ├── Internal
│ │ │ └── AccessorCache.cs
│ │ ├── key.snk
│ │ ├── ListAdapter.cs
│ │ ├── ObservableCollectionAdapter.cs
│ │ └── ReactiveProperty.Platform.Android.csproj
│ ├── ReactiveProperty.Platform.Blazor
│ │ ├── CommandExtensions.cs
│ │ ├── Components
│ │ │ ├── ReactivePropertiesValidator.cs
│ │ │ └── ReactivePropertiesValidatorEditContextExtensions.cs
│ │ ├── _Imports.razor
│ │ └── ReactiveProperty.Platform.Blazor.csproj
│ ├── ReactiveProperty.Platform.iOS
│ │ ├── BindingSupportExtensions.cs
│ │ ├── Internal
│ │ │ └── AccessorCache.cs
│ │ ├── IUICollectionViewDataSourceExtensions.cs
│ │ ├── IUITableViewDataSourceExtensions.cs
│ │ ├── key.snk
│ │ ├── ReactiveProperty.Platform.iOS.csproj
│ │ ├── UIBarItemExtensions.cs
│ │ ├── UICollectionViewSourceExtensions.cs
│ │ ├── UIGestureRecognizerExtensions.cs
│ │ ├── UIResponderExtensions.cs
│ │ └── UITableViewSourceExtensions.cs
│ ├── ReactiveProperty.Platform.Shared
│ │ ├── Extensions
│ │ │ └── DependencyObjectExtensions.cs
│ │ ├── Interactivity
│ │ │ ├── EventToReactiveCommand.cs
│ │ │ └── EventToReactiveProperty.cs
│ │ ├── ObjectExtensions
│ │ │ └── ObserveEveryValueChangedExtensions.cs
│ │ ├── ReactiveProperty.Platform.Shared.projitems
│ │ └── ReactiveProperty.Platform.Shared.shproj
│ ├── ReactiveProperty.Platform.UWP
│ │ ├── Interactivity
│ │ │ ├── Behavior.cs
│ │ │ ├── Behavior.Internal.cs
│ │ │ ├── ConditionBehavior.cs
│ │ │ ├── EventTriggerBehavior.cs
│ │ │ ├── ITrigger.cs
│ │ │ ├── PreviewInvokeEventArgs.cs
│ │ │ ├── TargetedTriggerAction.cs
│ │ │ ├── TargetedTriggerAction.Internal.cs
│ │ │ ├── TriggerActionCollection.cs
│ │ │ ├── TriggerAction.cs
│ │ │ ├── TriggerAction.Internal.cs
│ │ │ ├── TriggerBase.cs
│ │ │ ├── TriggerBase.Internal.cs
│ │ │ ├── Trigger.cs
│ │ │ └── Trigger.internal.cs
│ │ └── ReactiveProperty.Platform.UWP.csproj
│ └── ReactiveProperty.Platform.WPF
│ ├── key.snk
│ ├── ReactiveProperty.Platform.WPF.csproj
│ └── Schedulers
│ └── ReactivePropertyWpfScheduler.cs
└── Test
├── ReactiveProperty.Blazor.Tests
│ ├── Components
│ │ └── ReactivePropertiesValidatorTest.cs
│ └── ReactiveProperty.Blazor.Tests.csproj
├── ReactiveProperty.NETStandard.Tests
│ ├── AsyncReactiveCommandTest.cs
│ ├── AwaiterTest.cs
│ ├── Binding
│ │ ├── RxBindingExtensionsTest.cs
│ │ └── RxCommandExtensionsTest.cs
│ ├── ChainingAssertion.MSTest.cs
│ ├── Extensions
│ │ ├── AccessorCacheTest.cs
│ │ ├── CombineLatestEnumerableExtensionsTest.cs
│ │ ├── DisposePreviousValueExtensionsTest.cs
│ │ ├── INotifyPropertyChangedExtensionsTest.cs
│ │ ├── InverseObservableExtensionsTest.cs
│ │ ├── ObserveCollectionExtensionsTest.cs
│ │ ├── OldNewPairTest.cs
│ │ ├── PairwiseTest.cs
│ │ ├── ReactiveCollectionTest.cs
│ │ └── RetryObservableExtensionsTest.cs
│ ├── Helpers
│ │ ├── CollectionUtilitiesTest.cs
│ │ ├── FilteredReadOnlyObservableCollectionExtensionsTest.cs
│ │ └── FilteredReadOnlyObservableCollectionTest.cs
│ ├── Internals
│ │ └── PropertyObservableTest.cs
│ ├── MolesAssemblies
│ │ ├── mscorlib.Behaviors.dll
│ │ ├── mscorlib.Moles.dll
│ │ ├── System.Behaviors.dll
│ │ ├── System.Moles.dll
│ │ └── System.Moles.xml
│ ├── Notifiers
│ │ ├── BooleanNotifierTest.cs
│ │ ├── BusyNotifierTest.cs
│ │ ├── CountNotifierTest.cs
│ │ ├── MessageBrokerTest.cs
│ │ └── ScheduledNotifierTest.cs
│ ├── ReactiveCommandSlimTest.cs
│ ├── ReactiveCommandTest.cs
│ ├── ReactiveProperty.NETStandard.Tests.csproj
│ ├── ReactivePropertyPerformanceTest.cs
│ ├── ReactivePropertySlimTest.cs
│ ├── ReactivePropertyTest.cs
│ ├── ReactivePropertyTest.Static.cs
│ ├── ReactivePropertyValidationTest.cs
│ ├── ReactiveTimerTest.cs
│ ├── ReadOnlyReactiveCollectionTest.cs
│ ├── ReadOnlyReactivePropertySlimTest.cs
│ ├── ReadOnlyReactivePropertyTest.cs
│ ├── Strings
│ │ ├── Resource.Designer.cs
│ │ └── Resource.resx
│ ├── test-key.snk
│ ├── TestUtilities
│ │ └── RangedObservableCollection.cs
│ └── ValidatableReactivePropertyTest.cs
├── ReactiveProperty.WPF.ManualTests
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── AssemblyInfo.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── ReactiveProperty.WPF.ManualTests.csproj
│ ├── ValidationViewModel.cs
│ ├── ValidationWindow.xaml
│ └── ValidationWindow.xaml.cs
└── ReactiveProperty.WPF.Tests
├── ChainingAssertion.MSTest.cs
├── Extensions
│ └── DependencyObjectExtensionsTest.cs
├── Interactivity
│ └── EventToReactiveCommandTest.cs
├── ReactiveProperty.WPF.Tests.csproj
└── STATestMethodAttribute.cs
111 directories, 451 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论