Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Binding does not work for Platform dependent Behaviors #795

Closed
rachelkang opened this issue Nov 29, 2022 · 4 comments
Closed

[BUG] Binding does not work for Platform dependent Behaviors #795

rachelkang opened this issue Nov 29, 2022 · 4 comments
Labels

Comments

@rachelkang
Copy link


Issue moved from dotnet/maui#11729


From @YMichurin on Tuesday, November 29, 2022 4:07:21 PM

Description

Binding to observable property does not work in platform behaviors. Try any platform behavior community mvvm toolkit provides:

https://github.com/CommunityToolkit/Maui/tree/main/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors

or create your own, you would get the same result.

Here is an original stackoverflow thread https://stackoverflow.com/questions/74607699/binding-does-not-work-for-platform-dependent-behaviors

Steps to Reproduce

Take for example StatusBarBehavior, write something like

    <ContentPage.Behaviors>
        <toolkit:StatusBarBehavior StatusBarColor="{Binding StatusBarColorProp}" StatusBarStyle="LightContent" />
    </ContentPage.Behaviors>

create the property in your view model

    [ObservableProperty]
    private Color _statusBarColorProp;

Update the property value in code-behind or model like StatusBarColorProp=Color.FromRgb(255,0,0). You'll see status bar color does not change with StatusBarBehavior property change in runtime. Same for all the rest of behaviors. It works fine for non-bindings setters like StatusBarColor="Red".

Link to public reproduction project repository

https://github.com/CommunityToolkit/Maui/tree/main/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors

Version with bug

7.0 (current)

Last version that worked well

Unknown/Other

Affected platforms

I was not able test on other platforms

Affected platform versions

at least Android API 32 that I tested on, but does not seem to be platform dependent

Did you find any workaround?

interestingly while binding does not work for viewmodel, it does if you bind it to other control.

For example if you take BlurBehaviour from the repository https://github.com/VladislavAntonyuk/MauiSamples/tree/main/MauiImageEffects.

This code works fine:

<Image.Behaviors>
   <bh:BlurBehavior Radius="{Binding Value, Source={x:Reference imageBlurSlider}}"/>
</Image.Behaviors>

But this one does not

<Image.Behaviors>
   <bh:BlurBehavior Radius="{Binding MyMvvmBlurProperty}"/>
</Image.Behaviors>

Relevant log output

No response

@brminnick brminnick changed the title Binding does not work for Platform dependent Behaviors [BUG] Binding does not work for Platform dependent Behaviors Nov 29, 2022
@pictos
Copy link
Member

pictos commented Nov 29, 2022

I believe it's the default behavior, if I'm not wrong, since XF the bindingContext isn't passed to behavior automatically, if need to the BindingContext by your self, or use the {x:Reference} or RelativeToSource markup

@YMichurin
Copy link

YMichurin commented Nov 30, 2022

if I see a control with a binding property, as its consumer I would expect binding to ViewModel work out of the box. Strange to hear that it's a default behavior, I feel something is definitely off here, either in implementation of community toolkit controls, or Maui core lib, or Maui design as a framework

@pictos
Copy link
Member

pictos commented Nov 30, 2022

@YMichurin it's been this way since XF. from docs

Important

.NET MAUI does not set the BindingContext of a behavior, because behaviors can be shared and applied to multiple controls through styles.

@pictos
Copy link
Member

pictos commented Nov 30, 2022

With that, I'll close this issue. Since it's this way by design

@pictos pictos closed this as not planned Won't fix, can't repro, duplicate, stale Nov 30, 2022
Axemasta added a commit to Axemasta/CommunityToolkit.Maui that referenced this issue Feb 27, 2024
The binding context wasnt being set on the platform behavior. We will need to understand the impact of this going forwards, see CommunityToolkit#795
Axemasta added a commit to Axemasta/CommunityToolkit.Maui that referenced this issue Mar 6, 2024
The binding context wasnt being set on the platform behavior. We will need to understand the impact of this going forwards, see CommunityToolkit#795
Axemasta added a commit to Axemasta/CommunityToolkit.Maui that referenced this issue Mar 7, 2024
The binding context wasnt being set on the platform behavior. We will need to understand the impact of this going forwards, see CommunityToolkit#795
Axemasta added a commit to Axemasta/CommunityToolkit.Maui that referenced this issue Mar 14, 2024
The binding context wasnt being set on the platform behavior. We will need to understand the impact of this going forwards, see CommunityToolkit#795
brminnick added a commit that referenced this issue Mar 27, 2024
* init

* code style

* android bits

* code style

* dumb sample to test

* added a11y and initialization

* code style

* improved sample

* code style

* protect against NRE

* windows implementation

* code style

* Added comments to all public methods to enable builds without errors

* Missed some docs required for building

* Touch effect maui (#1326)

* Fixed some issues in Android implementation
* Added iOS implementation for TouchBehavior
* Reformatted code
* Removed duplicated extension methods

---------

Co-authored-by: Christian Rendl <[email protected]>

* Bringing touch-effect up to date with main (#1383)

* Popup v6 windows (#1086)

Co-authored-by: Brandon Minnick <[email protected]>
Co-authored-by: Pedro Jesus <[email protected]>
Co-authored-by: Shaun Lawrence <[email protected]>

* ♻️ [Housekeeping] Fixed  GravatarImageSourceTests.TestDefaultStream (#1335)

* [housekeeping] Automated PR to fix formatting errors (#1327)

* Fix popup margin on iOS (#1329)

* Bump NuGet.Protocol from 6.6.1 to 6.7.0 in /samples (#1330)

* Use fully qualified namespace for Color reference in TextToColorGenerator (#1332)

* Use fully qualified namespace for Color reference in TextToColorGenerator to prevent collisions

This change should prevent "ambiguous reference" error to occur when other packages are included in a MAUI project that provide their own Color objects

* added global prefix to be safer

---------

Co-authored-by: Pedro Jesus <[email protected]>
Co-authored-by: Brandon Minnick <[email protected]>

* Code cleanup and preparation for the next release (breaking changes) (#1324)

* Code cleanup and preparation for .net 8

* Update CompareConverter.shared.cs

* Revert global.json

* More CleanUps

* Remove redundant TrySetCanceled and rely on speech recognition result

* Update Formatting

---------

Co-authored-by: Brandon Minnick <[email protected]>

* Fix Gestures on Popup on ios (#1342)

* Fix Gestures on Popup on ios

* don't query type cast directly

* Code for AddLogicalChild (.NET 8)

* reduce changes

* setting the parent fixes the BindingContext of the view

* Revert "setting the parent fixes the BindingContext of the view"

This reverts commit 0a64b56.

* reduce changes

* simplify code

* fixing build

* assigned Element to contentPage.Parent

---------

Co-authored-by: pedrojesus <[email protected]>

* `global.json`: Change `"rollForward": "latestMajor",` -> `"rollForward": "latestFeature"`. (#1338)

Update global.json

* Bump Microsoft.NET.Test.Sdk from 17.7.0 to 17.7.1 in /samples (#1348)

Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.7.0 to 17.7.1.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md)
- [Commits](microsoft/vstest@v17.7.0...v17.7.1)

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* 632 bug avatar view clipping on windows (#1344)

* Resolves issue on Windows where the splash screen icon is not found.

* Resolves an issue with the 'Ratings' sample for AvatarView.

* Spaces and not tabs

* Spaces and not tabs

* Changed MauiImage to point to Images folder.

* Changed splash for Windows to be Resize=False

* Typo in name of MauiImage

* Try to prevent locking.

* Bump Microsoft.CodeAnalysis from 4.6.0 to 4.7.0 in /samples (#1355)

* Bump Microsoft.CodeAnalysis.CSharp.Workspaces from 4.6.0 to 4.7.0 in /samples (#1357)

* Bump FluentAssertions from 6.11.0 to 6.12.0 in /samples (#1365)

* fix  IconTintColorBehavior  for Windows (#1370)

fix  IconTintColorBehavior  for windows

Co-authored-by: Oleksii <[email protected]>

* Add `MemoryAnalyzer` roslyn analyzer (#1371)

* Add NuGet Package + Update `WarningsAsErrors`

* Fix MA0002

* Fix `MauiDrawingView`

* Fix `MauiPopup`

* Fix Naming

* return `null` for nullable references

* Use Ternary Operator

* `dotnet format`

* iOS popup fix with Shell or TabbedPage (#1343)

* Fix Issue #1256


Better fix

* Fixed Popup on Multiple Level Pages (#822)

---------

Co-authored-by: Vladislav Antonyuk <[email protected]>
Co-authored-by: Brandon Minnick <[email protected]>

* [housekeeping] Automated PR to fix formatting errors (#1373)

* Bump Microsoft.NET.Test.Sdk from 17.7.1 to 17.7.2 in /samples (#1378)

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Vladislav Antonyuk <[email protected]>
Co-authored-by: Brandon Minnick <[email protected]>
Co-authored-by: Pedro Jesus <[email protected]>
Co-authored-by: Shaun Lawrence <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: cat0363 <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wolf <[email protected]>
Co-authored-by: Thomas Stocker <[email protected]>
Co-authored-by: George Leithead <[email protected]>
Co-authored-by: Sokol2001 <[email protected]>
Co-authored-by: Oleksii <[email protected]>
Co-authored-by: Andrey Onishchenko <[email protected]>

* Added MacOS and brought across the sample page style from XCT

* Added TouchBehavior Unit Tests

* Fixed issue with hover

* Fix Rebase Issues

Git didnt pick up all the changes and the rebase left some files in a wierd way. I have restored broken files to their state on main

* Manual fixes for rebase collisions

Some changes from the rebase had to be manually backed out by hand, I've restored the file from main which should be enough to revert the changes.

* Moved sample page to gallery

The sample page is now in the proper location, all of the shell wiring has been done. I have refactored the command code to live in the viewmodel and use the source generators. The sample isn't binding at this current time, I will have to investigate.

* Fixed behavior binding

The binding context wasnt being set on the platform behavior. We will need to understand the impact of this going forwards, see #795

* Fixed binding in sample

Updated to remove the binding context from the platform behavior, we use a relative binding to talk to the viewmodel now

* Added input transparency test case

There is now an example of the control design that fails to register inputs, even when transparency is opted into

* Fix issue with input transparency

The issue I discovered where iOS would not set input transparency if the first child was a layout has now been resolved.

* Fixed Parent Child Taps

There was an issue in the sample where when tapping the parent/child view inside the child, both commands would execute. I have fixed this aswell as making sure the other behaviors arent affected

* Fixed Hover

The hovering now works correctly, we missed one area to force the ui to update

* Fixed Ripple View Positioning

The ripple view now positions correctly when there are child views in a layout.

* Code styling

Removing private & internal everywhere it can be removed. Removed some unused properties and cleaned up some nullable bits

* Dotnet format

Ran dotnet format, only checked in files related to touch behavior

* Replaced Console with Trace

As requested in the code review

* Update GestureManager.cs

Co-authored-by: Pedro Jesus <[email protected]>

* Code review changes

Updating null checks to pattern matching, some tweaks & implementing suggestions from Pedro

* Code Review

- Use `static` when possible
- Use `TimeSpan` for Duration
- Properly Implement Async/Await
- Properly Dispose
- Use PatternMatching for Enum
- Move Primatives to CommunityToolkit.Maui.Core

* Remove duplicate `ColorTo` extension

* Fix Windows

The touch behavior was token by the cancellation token changes. I'm not sure if passing none is the best idea, we possibly need to generate a real one?

* Fixed unit tests

* Use `uint` for Duration

* Use `int` for Duration

* Add TouchBehaviorDefaults

* Update Unit Tests

* Remove duplicate calls to `ConfigureAwaitOptions.ForceYielding`

* `dotnet format`

* Add nullability to `PressedBackgroundColor`

* Remove Unused Internal Properties

* Resolve Windows Compiler Errors

* `dotnet format`

* Remove duplicate `splash.svg`

* Update formatting

* Update Formatting

* Fix Find + Replace Error

* Use Primary Constructors

* Fix find + replace error

* Update StatusBarBehavior.shared.cs

* Fix Splash Screen

* Fix LongPress Gesture

* Update Unit Tests

* Fix Build Errors on Windows

* `dotnet format`

* Fix duplicate SplashScreen

* Revert splashscreen svg

* Update CommunityToolkit.Maui.Sample.csproj

* Add Unit Tests for CurrentStateChanged

* Add `CanExecuteTest`

* Add Unit Tests

* Update src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors/Touch/TouchBehavior.android.cs

Co-authored-by: Pedro Jesus <[email protected]>

* remove the ShouldUseNativeAnimation check in order to make it work

* throw ObjectDisposedException

* Big Fixes + Performance Improvements

* Remove `IsToggled`

* Update GestureManager.cs

* Rename `PulseCount` -> `RepeatAnimationCount`

* Prevent animations from happening immediately when the TouchBehavior is attached

* Rename `Normal` -> `Default`

* Cerate `ImageTouchBehavior`

* Move `SafeFireAndForgotExtensions`

* Update XML Documentation

* Fix Windows Build Errors

* Remove White Box

* `Normal` -> `Default`

* Fix Touch + Hover logic for ImageSource

* Remove `RepeatAnimationCount`

* Remove `RepeatAnimationCount`

* Fix `SetImageSource`

* `ContentVIew` -> `BoxView`

* Indicate Pressed and Released are Handled

Set e.Handled on PointerPressed and PointerReleased to stop passing to child controls on windows.

* Remove BoxView

* FIx Hover / Touch Logic in SetImageSource

* Refactor GestureManager, Add StateMachine tests

* Remove Unused + Duplicate Code

* Rename TouchBeahavior.methods.shared.cs

* Remove NativeAnimation Logic

* Remove NativeAnimation from Sample

* Fix Windows Build Errors

* Rename file

* Update ImageTouchBehaviorTests.cs

* Update ImageTouchBehaviorTests.cs

* Update ImageTouchBehaviorTests.cs

* Update ImageTouchBehaviorTests.cs

* Update ImageTouchBehaviorTests.cs

* Fix merge conflicts

* Fix build error

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Pedro Jesus <[email protected]>
Co-authored-by: Kym Phillpotts <[email protected]>
Co-authored-by: Christian Rendl <[email protected]>
Co-authored-by: Christian Rendl <[email protected]>
Co-authored-by: Vladislav Antonyuk <[email protected]>
Co-authored-by: Brandon Minnick <[email protected]>
Co-authored-by: Shaun Lawrence <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: cat0363 <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wolf <[email protected]>
Co-authored-by: Thomas Stocker <[email protected]>
Co-authored-by: George Leithead <[email protected]>
Co-authored-by: Sokol2001 <[email protected]>
Co-authored-by: Oleksii <[email protected]>
Co-authored-by: Andrey Onishchenko <[email protected]>
Co-authored-by: Gerald Versluis <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants