当前位置:网站首页>Loxodonframework quick start
Loxodonframework quick start
2022-07-07 09:25:00 【heater404】
One 、 brief introduction
LoxodonFramework What is it? , What is it for . I won't introduce it here , Direct up link :vovgou/loxodon-framework: An MVVM & Databinding framework that can use C# and Lua to develop games (github.com)
There is a full introduction and tutorial in the link , This article mainly records the experience of learning and understanding the framework .
Two 、 Quick start
I have used it before WPF Of MVVM frame –Prism, So in unity Also want to find a similar framework , that LoxodonFramework Can it also be like Prism So easy to use ? Now we can simply try .
3、 ... and 、 Example
![[ Failed to transfer the external chain picture , The origin station may have anti-theft chain mechanism , It is suggested to save the pictures and upload them directly (img-ZRXRgMVy-1638002288693)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20211127145949566.png)]](/img/f3/748ec0499b19401367928b626e01e6.jpg)
We have created the above project , Want to do such a thing : After entering a value in the input box, the slider will slide to the corresponding value , When the slider slides, the input box will display the corresponding value .
Just imagine , If not applicable MVVM Thought , We can mount a script , These two controls are found in the script properties , Then assign values to each other during operation , This should be a very simple job . But use MVVM How should I do it ?
3.1Model
Because the data model of the example is very simple , Basic data types can be used , So this layer is omitted .
3.2ViewModel
This layer is our interaction logic . Data update and event response logic code are here .
3.3View
Here is UI layer , Only controls are involved , It does not involve data business . Let's talk about the train of thought , Usually in UI Control to mount a script , This script is what we need View layer , Of course, it will inherit UIView class , Then bind in the script . Binding is mainly to UI The properties or events of the control are bound to ViewModel Properties or methods in . therefore ViewModel It's not a script , There is no need to mount on the control .

Then take a look at the specific implementation of the code :
public class SampleViewModel : ViewModelBase
{
private float sliderValue;
public float SliderValue
{
get {
return sliderValue; }
set {
Set<float>(ref sliderValue, value, "SliderValue"); }
}
public void OnSliderValueChanged(float newValue)
{
if (newValue != sliderValue)
{
this.SliderValue = newValue;
Debug.Log($"NewValue:{
newValue}");
}
}
public void OnInputFieldChanged(string str)
{
this.SliderValue = int.Parse(str);
}
}
public class SampleView : UIView
{
public InputField input;
public Slider slider;
protected override void Awake()
{
// Get the application context
ApplicationContext context = Context.GetApplicationContext();
// Start the data binding service
BindingServiceBundle bindingService = new BindingServiceBundle(context.GetContainer());
bindingService.Start();
}
protected override void Start()
{
// Get the data binding context
IBindingContext bindingContext = this.BindingContext();
bindingContext.DataContext = new SampleViewModel {
SliderValue = 98 };
// binding UI Control to view model
BindingSet<SampleView, SampleViewModel> bindingSet;
bindingSet = this.CreateBindingSet<SampleView, SampleViewModel>();
// take VM The value in is bound to UI Controls , Note that here is one-way binding vm=>v
bindingSet.Bind(this.input).For(v => v.text).To(vm => vm.SliderValue).OneWay();
bindingSet.Bind(this.slider).For(v => v.value).To(vm => vm.SliderValue).OneWay();
// Then bind the event of the control to vm The methods of , Be careful To To use generics , The parameters of the method are consistent with those of the event method .
// Of course, it can also be bound to commands ( Later we will introduce )
bindingSet.Bind(this.slider).For(v => v.onValueChanged).To<float>(vm => vm.OnSliderValueChanged);
bindingSet.Bind(this.input).For(v => v.onEndEdit).To<string>(vm=>vm.OnInputFieldChanged);
// This sentence should not be forgotten
bindingSet.Build();
}
}
The idea of binding is similar .
Four 、 About binding
There is such a piece of code in the above example :
// Get the data binding context
IBindingContext bindingContext = this.BindingContext();
bindingContext.DataContext = new SampleViewModel {
SliderValue = 98 };
The above code can also be modified as follows :
this.SetDataContext(new SampleViewModel {
SliderValue = 98 });
Behaviour Class extends SetDataContext Method , Its internal implementation also uses IBindingContext Interface .
Yes WPF Bound students must be familiar , you 're right , There's also DataContext The concept of . About DataContext, The author of the framework has such a description in the document :
Generally speaking, data binding is initialized in the view creation function , adopt BindingSet To configure the binding relationship between the view control and the view model , When calling BindingSet Of Build Function time ,
Binder Will create BindingSet All binding pairs in , The created binding pair will be saved in the current view BindingContext in .BindingContext Automatically create on the first call , Same as
Automatically generates a BindingContextLifecycle Script , Hang on the current view object , It controls BindingContext Life cycle of , When the view is destroyed ,BindingContext Meeting
And then destroy it , Store in BindingContext The binding relationship pairs in will also be destroyed .
therefore , about View Layer of DataContext, We can set it externally , Or later changes , It is not necessarily the same as the example in build Set it up .
边栏推荐
- 章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
- The use of recycling ideas
- DRF authentication, permissions, and flow restrictions (only for views in DRF)
- Jenkins modifies the system time
- PMP Exam Preparation experience systematically improve project management knowledge through learning
- flex弹性布局
- Unity shader (to achieve a simple material effect with adjustable color attributes only)
- Common short chain design methods
- Entity of cesium data visualization (Part 1)
- C language pointer (Part 2)
猜你喜欢
随机推荐
SAP MM STO单据的外向交货单创建后新加ITEM?
章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
What are the suggestions for PMP candidates?
信息安全实验四:Ip包监视程序实现
Jenkins+ant+jmeter use
How long does the PMP usually need to prepare for the exam in advance?
Jenkins modifies the system time
LeetCode每日一题(2316. Count Unreachable Pairs of Nodes in an Undirected Graph)
Leetcode daily questions (2316. count unreachable pairs of nodes in an undirected graph)
Netease Cloud Wechat applet
Chaosblade: introduction to chaos Engineering (I)
Pytest+request+allure+excel interface automatic construction from 0 to 1 [familiar with framework structure]
scrapy爬虫mysql,Django等
[chaosblade: node disk filling, killing the specified process on the node, suspending the specified process on the node]
答案在哪里?action config/Interceptor/class/servlet
Locust performance test 3 (high concurrency, parameter correlation, assembly point)
Colorbar of using vertexehelper to customize controls (II)
信息安全实验三 :PGP邮件加密软件的使用
Huawei hcip datacom core_ 03day
C language pointer (exercises)









