資源簡介
模仿vue 實現的 在winform 上實現的數據模型雙向綁定。升級版使用 castle 進行動態代理,較與舊版節省大量代碼的書寫,同時將核心抽出來,還能用到其它需要監聽屬性變化的地方

代碼片段和文件信息
using?Castle.DynamicProxy;
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Windows.Forms;
using?TViewCore;
namespace?TView
{
????public?class?ViewBind
????{
????????///?
????????///?默認綁定事件
????????///?
????????private?string?DefaultEvents?=?“Collectionchange|SelectedValueChanged|ValueChanged|TextChanged“;
????????///?
????????///?默認綁定的屬性,從左往右,能找到則賦值
????????///?
????????private?string?DefaultProperty?=?“DataSource|Value|Text“;
????????///?
????????///?綁定視圖
????????///?
????????///?父控件
????????///?模型(對象)
????????public?ViewBind(Control?ParentControl?object?model)
????????{
????????????var?pg?=?new?ProxyGenerator();
????????????var?pi?=?new?PropertyInterceptor(model);
????????????model?=?pg.CreateClassProxy(model.GetType()?new?IInterceptor[]?{?pi?});
????????????this.BindingParentControl(ParentControl?model);
????????}
????????///?
????????///?綁定控件
????????///?
????????///?父控件
????????///?實體
????????private?void?BindingParentControl(Control?ParentControl?object?model)
????????{
????????????this.BindControl(ParentControl?model?ParentControl.Controls);
????????}
????????///?
????????///?綁定控件
????????///?
????????///?父控件
????????///?實體
????????///?子控件列表
????????private?void?BindControl(Control?ParentControl?object?model?Control.ControlCollection?Controls)
????????{
????????????foreach?(Control?control?in?Controls)
????????????{
????????????????var?tag?=?control.Tag;
????????????????
????????????????if?(tag?==?null)?continue;
????????????????foreach?(var?tagInfo?in?tag.ToString().Split(‘|‘))
????????????????{
????????????????????var?tagInfoArr?=?tagInfo.Split(‘-‘);
????????????????????//屬性綁定
????????????????????if?(tagInfoArr[0].Equals(“dt“)||?tagInfoArr[0].Equals(“data“))
????????????????????{
????????????????????????var?bindProperty?=?string.Empty;
????????????????????????if?(tagInfoArr.Length?==?2)
????????????????????????{
????????????????????????????foreach?(var?property?in?DefaultProperty.Split(‘|‘))
????????????????????????????{
????????????????????????????????if(control.GetType().GetProperty(property)!=null)
????????????????????????????????{
????????????????????????????????????bindProperty?=?property;
????????????????????????????????????break;
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????????else?if?(tagInfoArr.Length?==?3)
????????????????????????{
????????????????????????????bindProperty?=?tagInfoArr[1];
????????????????????????}
????????????????????????else?continue;
????????????????????????string?propertyName?=?tagInfoArr[ta
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????329??2018-08-26?00:18??tview_v2\.git\config
?????文件?????????73??2018-08-26?00:18??tview_v2\.git\desc
?????文件?????????23??2018-08-26?00:18??tview_v2\.git\HEAD
?????文件????????478??2018-08-26?00:18??tview_v2\.git\hooks\applypatch-msg.sample
?????文件????????896??2018-08-26?00:18??tview_v2\.git\hooks\commit-msg.sample
?????文件???????3327??2018-08-26?00:18??tview_v2\.git\hooks\fsmonitor-watchman.sample
?????文件????????189??2018-08-26?00:18??tview_v2\.git\hooks\post-update.sample
?????文件????????424??2018-08-26?00:18??tview_v2\.git\hooks\pre-applypatch.sample
?????文件???????1638??2018-08-26?00:18??tview_v2\.git\hooks\pre-commit.sample
?????文件???????1348??2018-08-26?00:18??tview_v2\.git\hooks\pre-push.sample
?????文件???????4898??2018-08-26?00:18??tview_v2\.git\hooks\pre-reba
?????文件????????544??2018-08-26?00:18??tview_v2\.git\hooks\pre-receive.sample
?????文件???????1492??2018-08-26?00:18??tview_v2\.git\hooks\prepare-commit-msg.sample
?????文件???????3610??2018-08-26?00:18??tview_v2\.git\hooks\update.sample
?????文件??????11579??2018-08-26?00:18??tview_v2\.git\index
?????文件????????240??2018-08-26?00:18??tview_v2\.git\info\exclude
?????文件????????182??2018-08-26?00:18??tview_v2\.git\logs\HEAD
?????文件????????182??2018-08-26?00:18??tview_v2\.git\logs\refs\heads\master
?????文件????????182??2018-08-26?00:18??tview_v2\.git\logs\refs\remotes\origin\HEAD
?????文件???????4012??2018-08-26?00:18??tview_v2\.git\ob
?????文件????1118364??2018-08-26?00:18??tview_v2\.git\ob
?????文件????????114??2018-08-26?00:18??tview_v2\.git\packed-refs
?????文件?????????41??2018-08-26?00:18??tview_v2\.git\refs\heads\master
?????文件?????????32??2018-08-26?00:18??tview_v2\.git\refs\remotes\origin\HEAD
?????文件????????452??2018-08-26?00:51??tview_v2\.vs\TView\DesignTimeBuild\.dtbcache
????..A..H.????102400??2018-08-29?22:54??tview_v2\.vs\TView\v15\.suo
?????文件??????????0??2018-08-26?00:18??tview_v2\.vs\TView\v15\Server\sqlite3\db.lock
?????文件???????4096??2018-08-26?00:18??tview_v2\.vs\TView\v15\Server\sqlite3\storage.ide
?????文件??????32768??2018-08-29?21:33??tview_v2\.vs\TView\v15\Server\sqlite3\storage.ide-shm
?????文件?????972352??2018-08-29?21:34??tview_v2\.vs\TView\v15\Server\sqlite3\storage.ide-wal
............此處省略163個文件信息
評論
共有 條評論