{"id":18780277,"url":"https://github.com/reactivemarbles/propertychanged","last_synced_at":"2025-04-04T09:08:08.735Z","repository":{"id":35078337,"uuid":"200392826","full_name":"reactivemarbles/PropertyChanged","owner":"reactivemarbles","description":"A lightweight property changed/binding framework. This is a incubator which is focused on fast binding and property changes.","archived":false,"fork":false,"pushed_at":"2025-03-27T07:29:50.000Z","size":450,"stargazers_count":61,"open_issues_count":17,"forks_count":9,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-27T08:31:18.417Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reactivemarbles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"reactivemarbles"}},"created_at":"2019-08-03T15:44:08.000Z","updated_at":"2024-11-25T00:32:42.000Z","dependencies_parsed_at":"2023-11-16T01:25:30.202Z","dependency_job_id":"82770f60-d659-4a95-ab59-46bef4415a80","html_url":"https://github.com/reactivemarbles/PropertyChanged","commit_stats":{"total_commits":193,"total_committers":7,"mean_commits":"27.571428571428573","dds":0.5699481865284974,"last_synced_commit":"e09d2a407ae9f95110b1269adce521f7b9963758"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactivemarbles%2FPropertyChanged","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactivemarbles%2FPropertyChanged/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactivemarbles%2FPropertyChanged/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactivemarbles%2FPropertyChanged/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reactivemarbles","download_url":"https://codeload.github.com/reactivemarbles/PropertyChanged/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247149501,"owners_count":20891954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T20:25:36.822Z","updated_at":"2025-04-04T09:08:08.717Z","avatar_url":"https://github.com/reactivemarbles.png","language":"C#","funding_links":["https://github.com/sponsors/reactivemarbles"],"categories":[],"sub_categories":[],"readme":"# Reactive Marbles Property Changed\n\n## Packages\n\n| Container | NuGet\n|---------|-------|\n| [PropertyChanged][PropertyChanged] | [![PropertyChangedBadge]][PropertyChanged]\n| [PropertyChanged.SourceGenerator][PropertyChangedSourceGen] | [![PropertyChangedSourceGenBadge]][PropertyChangedSourceGen]\n\n[PropertyChanged]: https://www.nuget.org/packages/ReactiveMarbles.PropertyChanged/\n[PropertyChangedBadge]: https://img.shields.io/nuget/v/ReactiveMarbles.PropertyChanged.svg\n[PropertyChangedSourceGen]: https://www.nuget.org/packages/ReactiveMarbles.PropertyChanged.SourceGenerator/\n[PropertyChangedSourceGenBadge]: https://img.shields.io/nuget/v/ReactiveMarbles.PropertyChanged.SourceGenerator.svg\n\n## Overview \n\nA framework for providing an observable with the latest value of a property expression.\n\nThe source generator version will generate raw source code for the binding. If you have private/protected classes and/or properties it may require partial classes.\n\nThe regular version will use Expression trees on platforms that support it (no iOS based platforms). On iOS it will just use reflection. This provides a roughly 2x performance boost for those platforms that can use expression trees.\n\n```cs\nthis.WhenChanged(x =\u003e x.Property1.Property2.Property3);\n```\n\nThe above will generate a `IObservable\u003cT\u003e` where T is the type of `Property3`. It will signal each time a value has changed. It is aware of all property changes in the property chain.\n\n## Binding\n\nThere are several methods of binding.\n\nFirst is two way binding. Two way binding will update either the `host` or the `target` whenever the target property has changed.\n\n```cs\nhost.BindTwoWay(target, host =\u003e host.B.C, target =\u003e target.D.E);\n```\n\nOne way binding will only update the `target` with changes  the `host`'s specified target property.\n\n```cs\nhost.BindOneWay(target, host =\u003e host.B.C);\n```\n\nThere are also overloads with lambdas that allow you to convert from the `host` to the `target`. These will allow you to convert at binding time to the specified formats.\n\n```cs\nhost.BindOneWay(target, host =\u003e host.B.C, hostProp =\u003e ConvertToTargetPropType(hostProp));\nhost.BindTwoWay(target, host =\u003e host.B.C, target =\u003e target.D.E, hostProp =\u003e ConvertToTargetPropType(hostProp), targetProp =\u003e ConvertToHostPropType(targetProp));\n```\n\n# Limitations compared to ReactiveUI\n\nAt the moment it only supports `INotifyPropertyChanged` properties. More property types to come such as WPF DependencyProperty.\n\n# Milestones \n\n* Implement initial binding and property changes.\n\n# Benchmark Comparisons\n\nDetailed benchmarking results can be found [here](/docs/Performance.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactivemarbles%2Fpropertychanged","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freactivemarbles%2Fpropertychanged","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactivemarbles%2Fpropertychanged/lists"}