Backing data bound to Ui objects fail to redraw screen
axa88 opened this issue · comments
Describe the bug
Objects such as Switch
, CheckBox
implementing INotifyPropertyChanged
notification and bound to backing data does not for UI redraw when bound data is updated.
UI objects Label
and CheckBox
are utilized in the list cells of a CircleListView
, and it is found that only when the backing data of the Label
will force a UI update, the CheckBox
does not.
To see the change you will have to touch the screen forcing a redraw. That should not be necessary.
To Reproduce
Create a CircleListView
with ItemSource
cells bound to a Label
bound to backing data and a CheckBox
or Switch
bound to backing data both implementing INotifyPropertyChanged
triggering OnPropertyChanged
.
PrimaryText = new Label
{
FontSize = cellStructure.PrimaryDefaultTextSize,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
HorizontalTextAlignment = TextAlignment.Center,
VerticalTextAlignment = TextAlignment.Center,
HeightRequest = cellStructure.DualLines ? cellStructure.CellHeight * PrimaryHeightRatio : cellStructure.CellHeight
};
PrimaryText.SetBinding(Label.TextProperty, nameof(ListCellViewModel.PrimaryText));
and creating CheckBox
or Switch
and binding it to the view model:
RightButton = new CheckBox
{
WidthRequest = 75,
HeightRequest = 75,
HorizontalOptions = LayoutOptions.End,
VerticalOptions = LayoutOptions.Center,
BackgroundColor = Color.Transparent,
Scale = .75,
Margin = new Thickness(0,0,10,0)
};
RightButton.SetBinding(CheckBox.IsCheckedProperty, nameof(ListCellViewModel.ButtonRight));
Note
Items are not Added, Removed, Moved ect, from the ObservableCollection
, and i do not wish to force to list to redraw entirely, only the updated items.
ItemCollection = new ObservableCollection<ListCellViewModel>();
Members of ListCellViewModel
:
public string PrimaryText
{
get => _primaryText;
set
{
if (_primaryText != value)
{
_primaryText = value;
OnPropertyChanged();
}
}
}
public virtual bool ButtonRight
{
get => _buttonRight;
set
{
if (_buttonRight != value)
{
_buttonRight = value;
OnPropertyChanged();
}
}
}
When only the CheckBox
data is updated, the screen will not redraw until something else forces it to redraw such as scrolling the list.
Expected behavior
It is expected backing data should be able to update a listview items without manual interactoin when its binding data updates as it does in this Label
:
But it does not with a CheckBox
or Switch
:
Environment (please complete the following information):
- Target Product [emulator 5.5 on 3.7 SDK (2.8.0.28)]
- Tizen Platform Version [Tizen 5.5]
- Tizen.CircularUI Version [1.5.1]
Could you share the code you tested? (Providing the project file helps us a lot. :-))
Actually, CheckBox
and Switch
is not a part of the CircularUI, but let's check.
Actually, CheckBox and Switch is not a part of the CircularUI, but let's check.
Of course you are correct, im only using forms with CircularUI now so i am narrow minded.
(Providing the project file helps us a lot. :-))
Understood. I need to concider how to share without exposing any closed api information.
Creating sanitized examples takes much time...
@axa88 Hi, I can't reproduce it
It is working well
Here is my test code
https://gist.github.com/myroot/5d483638ebb4d7ac39aa3b6416d55ad9
CircleListBinding.zip
Please remove Scale
on CheckBox, It seems issue related Scale
property
@myroot
Scale
property should not be used for CheckBox
, or should not be used with Galaxy wearable at all?
Regardless i have checked your example and see it working with and without Scale
used.
I will try to close and reopen new issue if i see a problem.
thanks for quick response.
@axa88 It's only CheckBox
issue