Skip to content

Commit

Permalink
Updated Sample and added new view to it: CollectionView with example …
Browse files Browse the repository at this point in the history
…of how to implement custom binding and collection binding to ListView
  • Loading branch information
bustedbunny committed Apr 1, 2023
1 parent 3ba9184 commit 4a38900
Show file tree
Hide file tree
Showing 25 changed files with 387 additions and 129 deletions.
6 changes: 3 additions & 3 deletions Samples~/SampleView.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 20 additions & 16 deletions Samples~/SampleView/SampleUIInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,34 @@
using Cysharp.Threading.Tasks;
using MVVMToolkit;
using MVVMToolkit.DependencyInjection;
using SampleView.TestView;
using UnityEngine;

// This is just an example of how you can initialize your UI
// This can be done in infinite other ways and depends only on your application
[RequireComponent(typeof(UIRoot))]
public class SampleUIInitializer : MonoBehaviour
namespace SampleView
{
// Internally UI is initialized in Awake
// Actual initialization should be done at least after Start
void Start() => InitializeAsync().Forget();

private async UniTask InitializeAsync()
[RequireComponent(typeof(UIRoot))]
public class SampleUIInitializer : MonoBehaviour
{
var root = GetComponent<UIRoot>();
// Internally UI is initialized in Awake
// Actual initialization should be done at least after Start
void Start() => InitializeAsync().Forget();

private async UniTask InitializeAsync()
{
var root = GetComponent<UIRoot>();

// We call UIRoot.Initialize method and provide StrongReferenceMessenger and ServiceProvider instances.
// If you have external services on which your Views or ViewModels rely you must register them
// before calling Initialize.
var messenger = new StrongReferenceMessenger();
var serviceProvider = new ServiceProvider();
// We call UIRoot.Initialize method and provide StrongReferenceMessenger and ServiceProvider instances.
// If you have external services on which your Views or ViewModels rely you must register them
// before calling Initialize.
var messenger = new StrongReferenceMessenger();
var serviceProvider = new ServiceProvider();

// Before we can make any calls to UI, we need to await it's initialization
await root.Initialize(messenger, serviceProvider);
// Before we can make any calls to UI, we need to await it's initialization
await root.Initialize(messenger, serviceProvider);

messenger.Send<OpenTestViewMessage>();
messenger.Send<OpenTestViewMessage>();
}
}
}
21 changes: 0 additions & 21 deletions Samples~/SampleView/SampleUXMLTemplate.uxml

This file was deleted.

70 changes: 69 additions & 1 deletion Samples~/SampleView/Scenes/SampleView.unity
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 244309179}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c37655f47b364b3aa2d18c5354f1c34b, type: 3}
m_Name:
Expand All @@ -189,6 +189,73 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 375d9e8728f34274bb6f0a053b2b06f7, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &410680805
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 410680806}
- component: {fileID: 410680808}
- component: {fileID: 410680807}
m_Layer: 0
m_Name: CollectionView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &410680806
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 410680805}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 875316665}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &410680807
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 410680805}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cb812fd181fe4613a332a4234c18e9a9, type: 3}
m_Name:
m_EditorClassIdentifier:
_initialData:
- text: English
image: {fileID: 2800000, guid: 77c34669b98a6f94492212b129d072b6, type: 3}
- text: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439"
image: {fileID: 2800000, guid: 8aa0d84154f29f24ea44c1adee152ad5, type: 3}
--- !u!114 &410680808
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 410680805}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ed214592445f43b9bbc46e47e8f667ad, type: 3}
m_Name:
m_EditorClassIdentifier:
_localizationAssetTables: []
_localizationStringTables: []
asset: {fileID: 9197481963319205126, guid: 92de444713d948c88341ce36bb75c1b2, type: 3}
sortLayer: 0
bindingContext: {fileID: 410680807}
--- !u!1 &875316663
GameObject:
m_ObjectHideFlags: 0
Expand Down Expand Up @@ -233,6 +300,7 @@ Transform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 244309180}
- {fileID: 410680806}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
Expand Down
23 changes: 0 additions & 23 deletions Samples~/SampleView/TestView.cs

This file was deleted.

62 changes: 0 additions & 62 deletions Samples~/SampleView/TestViewModel.cs

This file was deleted.

9 changes: 6 additions & 3 deletions Samples~/SampleView/TextureToTexture2DConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
using UnityEngine.Scripting;

// Converter need to be preserved in case you use code stripping
[Preserve]
public class TextureToTexture2DConverter : MultiSolver<Texture2D, Texture>
namespace SampleView
{
protected override Texture Convert(Texture2D value) => value;
[Preserve]
public class TextureToTexture2DConverter : MultiSolver<Texture2D, Texture>
{
protected override Texture Convert(Texture2D value) => value;
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@import url("unity-theme://default");

@import url("/Assets/com.bustedbunny.mvvmtoolkit/Runtime/Resources/MVVMTKDefault.uss");
@import url("TooltipStyles.uss");

3 changes: 3 additions & 0 deletions Samples~/SampleView/Views.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Samples~/SampleView/Views/CollectionView.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions Samples~/SampleView/Views/CollectionView/CollectionView.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using CommunityToolkit.Mvvm.Messaging;
using MVVMToolkit;

namespace SampleView.CollectionView
{
public class CollectionViewView : BaseView, IRecipient<OpenCollectionViewMessage>
{
public void Receive(OpenCollectionViewMessage message)
{
enabled = true;
}
}

public class OpenCollectionViewMessage { }
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions Samples~/SampleView/Views/CollectionView/CollectionView.uss
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
.template-container {
flex-grow: 1;
flex-direction: row;
}

.template-element {
height: 100%;
flex-grow: 1;
}

.template-flag {
height: 100%;
width: 100px;
}
11 changes: 11 additions & 0 deletions Samples~/SampleView/Views/CollectionView/CollectionView.uss.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions Samples~/SampleView/Views/CollectionView/CollectionView.uxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements"
xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements"
noNamespaceSchemaLocation="../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<Style src="project://database/Assets/SampleView/Views/CollectionView/CollectionView.uss?fileID=7433441132597879392&amp;guid=c3aff912b80f6d443b99129233e4d24d&amp;type=3#CollectionView"/>
<ui:VisualElement style="flex-grow: 1; background-color: rgb(185, 185, 185);">
<ui:Button text="Back to TestView" view-data-key="{@OpenTestView}"/>

<ui:ListView view-data-key="{~Collection:Template} {*CollectionViewBinder}"
virtualization-method="DynamicHeight" style="font-size: 42px; align-items: flex-start;"/>
<MVVMToolkit.DataTemplate name="Template">
<ui:VisualElement class="template template-container">
<ui:Label view-data-key="{:LabelBinder}" class="template template-element"/>
<ui:VisualElement view-data-key="{:ImageBinder}" class="template template-flag"/>
</ui:VisualElement>
</MVVMToolkit.DataTemplate>
</ui:VisualElement>
</ui:UXML>

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 4a38900

Please sign in to comment.