Skip to content

Commit 2e6d50d

Browse files
committed
又重写Mvvm UIModel
1 parent 1457fb4 commit 2e6d50d

File tree

3 files changed

+134
-3
lines changed

3 files changed

+134
-3
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using UnityEngine;
5+
using UnityEngine.UI;
6+
7+
namespace Wanderer.GameFramework
8+
{
9+
public class UIModel<T>
10+
{
11+
private T _variable;
12+
private Action<T> _onVariableChanged;
13+
14+
public T Variable
15+
{
16+
get
17+
{
18+
return _variable;
19+
}
20+
set
21+
{
22+
_variable = value;
23+
_onVariableChanged?.Invoke(_variable);
24+
}
25+
}
26+
27+
public UIModel<T> OnVariableChanged(Action<T> onVariableChanged)
28+
{
29+
_onVariableChanged = onVariableChanged;
30+
return this;
31+
}
32+
}
33+
34+
public class ModelViewBind<T1,T2>
35+
{
36+
public UIModel<T1> Model { get; private set; }
37+
public T2 Target { get; private set; }
38+
39+
private Func<UIModel<T1>, T2, T1> _getCallback;
40+
private Action<T1, T2> _setCallback;
41+
private bool _oneWayBinding;
42+
43+
public T1 Variable
44+
{
45+
get
46+
{
47+
T1 t1 = _getCallback(Model, Target);
48+
if (!t1.Equals(Model.Variable))
49+
{
50+
Model.Variable = t1;
51+
}
52+
return t1;
53+
}
54+
set
55+
{
56+
Model.Variable = value;
57+
}
58+
}
59+
60+
61+
62+
63+
public ModelViewBind(T2 target)
64+
{
65+
Model = new UIModel<T1>();
66+
67+
Model.OnVariableChanged((t1)=> {
68+
if (!_oneWayBinding)
69+
{
70+
_setCallback?.Invoke(Model.Variable, Target);
71+
}
72+
});
73+
74+
Target = target;
75+
}
76+
77+
public ModelViewBind<T1,T2> Get(Func<UIModel<T1>, T2, T1> callback)
78+
{
79+
_getCallback = callback;
80+
return this;
81+
}
82+
83+
public ModelViewBind<T1, T2> Set(Action<T1,T2> callback)
84+
{
85+
_setCallback = callback;
86+
return this;
87+
}
88+
89+
90+
public ModelViewBind<T1, T2> OneWay()
91+
{
92+
_oneWayBinding = true;
93+
return this;
94+
}
95+
96+
}
97+
98+
99+
public static class ModelViewBinding
100+
{
101+
public static ModelViewBind<TValue, TComponent> Bind<TValue, TComponent>(TComponent target, TValue value = default(TValue))
102+
{
103+
var mvb = new ModelViewBind<TValue, TComponent>(target);
104+
if (!value.Equals(default(TValue)))
105+
{
106+
mvb.Variable = value;
107+
}
108+
return mvb;
109+
}
110+
}
111+
112+
}
113+
114+

GameFramework/Runtime/UI/MVVM/UIModel.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

GameFramework/Runtime/UI/MVVM/UIModelView.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public JsonData Json
4242

4343
private void Awake()
4444
{
45-
4645
}
4746

4847
public void Set(string key, JsonData value)
@@ -74,9 +73,16 @@ private BindResult Bind(string key,GameObject target)
7473
return buildResult;
7574
}
7675

77-
//public void Add(string key, JsonData value)
76+
77+
//private ModelViewBind<TValue, TComponent> Bind<TValue, TComponent>(string key,TComponent target, TValue value = default(TValue))
7878
//{
79-
// Json[key].Add(value);
79+
// var mvb = new ModelViewBind<TValue, TComponent>(target);
80+
// if (!value.Equals(default(TValue)))
81+
// {
82+
// mvb.Variable = value;
83+
// }
84+
// return mvb;
8085
//}
86+
8187
}
8288
}

0 commit comments

Comments
 (0)