Dev中的MVVM
Dev中的MVVM实现
参考博客
https://www.cnblogs.com/lovexinyi/p/11980398.html
https://blog.csdn.net/hbwhypw/article/details/108804523
代码示例
public class View:UserControl
{
MVVMContext mvvmContext;
public View()
{
InitializeComponet();
InitialBinding();
}
public void InitialBinding()
{
MVVMContextFluentAPI<Model> fluentAPI = mvvmContext.OfType<Model>();
//绑定属性
fluentAPI.SetBinding(textEdit1,x=>x.Text,y=>Text);
fluentAPI.SetBinding(dataGrid1,x=>x.DataSource,y=>DataLis);
fluentAPI.SetBinding(series1,x=>x.DataSource,y=>DataLis);
//绑定命令(默认命令,一般指按钮)
//命令默认是不带参数或带一个参数的虚方法
fluentAPI.BindCommand(simpleButton1,x=>x.Click);
string paramter="Hello World";
fluentAPI.BindCommand(simpleButton2,(x,p)=>x.ClickParam(p),x=>paramter);
//绑定任意命令(可以是控件的任一事件)
//形式:fluentAPI.WithEvent<原事件的入参,如果没有不填>(控件,控件的事件名).EventToCommand(x=>x.ViewModel中的方法)
fluentAPI.WithEvent<FocusedRowChangedEventArgs>(gridView1, "FocusedRowChanged").EventToCommand(x => x.GetRowHandle);
//还有内容未写
//触发器
//当Model中的虚属性发生变化,会在View中触发
flentAPI.SetTrigger(x=>x.DataLis,d=>{
textEdit.Text=d.Count;
});
//通信
//注册通知
Messenger.Default.Register<string>(this,ShowCount);
//服务
//行为
}
private void ShowCount()
{
Console.WriteLine(message);
}
}
//无需继承INotif
public class Model
{
//如果不加virtual那么只有View——>ViewModel的刷新
//加virtualView<——>ViewModel
public virtual string Text {get;set;}
//可以通过特性指定属性修改后触发的方法
//在Dev中对于集合元素只有集合的Count发生变化才视为属性变化
[BindableProperty(OnPropertyChangedMethodName="ShowLisCount")]
public virtual BindingList<Data> DataLis {get;set;}=new BindingList<Data>();
public virtual void Click(){ }
public virtual void ClickParam(string param){}
//属性更改该方法自动触发(属性前面必须要加virtual)
public virtual void OnTextChanged(){}
public virtual void ShowLisCount()
{
//一种简单的在类之间传值的方法
//实现了全局的观察者模式(发布订阅的通信方式)
Messenger.Default.Send(DataLis.Count);
}
//实现线程间通信的功能
IDispatcherService Dispatcher
{
get { return this.GetService<IDispatcherService>(); }
}
private async Task AsyncChangeText()
{
//InvalidOperationException: 线程间操作无效: 从不是创建控件“textEdit3”的线程访问它。
await Task.Run(() => { Text = "666"; });
await Task.Run(() => { Dispatcher.BeginInvoke(() => { Text = "666"; }); });
}
}

浙公网安备 33010602011771号