Skip to content

Commit 8bba989

Browse files
committed
Move ToDoList sample to observable properties.
1 parent 3f8dfce commit 8bba989

25 files changed

Lines changed: 378 additions & 310 deletions

samples/Unity.Mvvm.ToDoList/Assets/Scripts/AppContext.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Services;
55
using UnityEngine;
66
using UnityEngine.UIElements;
7+
using UnityMvvmToolkit.Common.Interfaces;
78
using UnityMvvmToolkit.Core.Converters.PropertyValueConverters;
89
using UnityMvvmToolkit.Core.Interfaces;
910
using ViewModels;
@@ -50,6 +51,11 @@ public void Dispose()
5051

5152
private void RegisterInstance<T>(T instance)
5253
{
54+
if (instance is IInitializable initializable)
55+
{
56+
initializable.Initialize();
57+
}
58+
5359
if (instance is IDisposable disposable)
5460
{
5561
_disposables.Add(disposable);

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers/BindableBinaryStateButtonWrapper.cs

Lines changed: 0 additions & 37 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers/BindableBinaryStateButtonWrapper.cs.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers/BindableBinaryStateElementWrapper.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers/BindableBinaryStateElementWrapper.cs.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers/BindableTaskScrollViewWrapper.cs

Lines changed: 0 additions & 47 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElementWrappers/BindableTaskScrollViewWrapper.cs.meta

Lines changed: 0 additions & 3 deletions
This file was deleted.

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElements/BindableBinaryStateButton.cs

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,70 @@
1-
using Interfaces;
1+
using System.Runtime.CompilerServices;
2+
using Interfaces;
23
using UnityEngine.UIElements;
4+
using UnityMvvmToolkit.Core;
5+
using UnityMvvmToolkit.Core.Extensions;
6+
using UnityMvvmToolkit.Core.Interfaces;
37
using UnityMvvmToolkit.UITK.BindableUIElements;
48

59
namespace BindableUIElements
610
{
711
public abstract class BindableBinaryStateButton : BindableButton, IBindableBinaryStateElement
812
{
9-
public string BindingStatePath { get; set; }
13+
private IReadOnlyProperty<bool> _stateProperty;
14+
private PropertyBindingData _statePathBindingData;
15+
16+
public string BindingStatePath { get; private set; }
17+
18+
public override void SetBindingContext(IBindingContext context, IObjectProvider objectProvider)
19+
{
20+
base.SetBindingContext(context, objectProvider);
21+
22+
_statePathBindingData ??= BindingStatePath.ToPropertyBindingData();
23+
24+
_stateProperty = objectProvider.RentReadOnlyProperty<bool>(context, _statePathBindingData);
25+
_stateProperty.ValueChanged += OnStateValueChanged;
26+
27+
UpdateControl(_stateProperty.Value);
28+
}
29+
30+
private void OnStateValueChanged(object sender, bool newValue)
31+
{
32+
UpdateControl(newValue);
33+
}
34+
35+
public override void ResetBindingContext(IObjectProvider objectProvider)
36+
{
37+
base.ResetBindingContext(objectProvider);
38+
39+
if (_stateProperty == null)
40+
{
41+
return;
42+
}
43+
44+
objectProvider.ReturnReadOnlyProperty(_stateProperty);
45+
46+
_stateProperty.ValueChanged -= OnStateValueChanged;
47+
_stateProperty = null;
48+
49+
UpdateControl(false);
50+
}
1051

1152
public abstract void Activate();
1253
public abstract void Deactivate();
1354

55+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
56+
private void UpdateControl(bool value)
57+
{
58+
if (value)
59+
{
60+
Activate();
61+
}
62+
else
63+
{
64+
Deactivate();
65+
}
66+
}
67+
1468
public new class UxmlTraits : BindableButton.UxmlTraits
1569
{
1670
private readonly UxmlStringAttributeDescription _stateAttribute = new()

samples/Unity.Mvvm.ToDoList/Assets/Scripts/BindableUIElements/BindableStrikethroughLabel.cs

Lines changed: 0 additions & 63 deletions
This file was deleted.

0 commit comments

Comments
 (0)