当前位置: 首页 > news >正文

杭州企业网站制作公司手机网站营销

杭州企业网站制作公司,手机网站营销,大气医院网站源码,深圳市建设工程质量检测中心官网MVVM模式下实现拖拽 原文:MVVM模式下实现拖拽在文章开始之前先看一看效果图 我们可以拖拽一个游戏给ListBox,并且ListBox也能接受拖拽过来的数据#xff0c; 但是我们不能拖拽一个游戏类型给它。 所以当拖拽开始发生的时候我们必须添加一些限制条件游戏给ListBox,并且ListBox也能接受拖拽过来的数据 但是我们不能拖拽一个游戏类型给它。 所以当拖拽开始发生的时候我们必须添加一些限制条件以防止接受不正确的数据。     Item实体 CS public class ItemModel : ViewModelBase{public string ItemName { get; set; }}组实体 CS public class GroupModel : ViewModelBase{/// summary/// 组名/// /summarypublic string GroupName { get; set; }private int groupCount;/// summary/// 组数量/// /summarypublic int GroupCount{get { return groupCount; }set { groupCount value; base.RaisePropertyChanged(GroupCount); }}/// summary/// 子类集合/// /summarypublic ObservableCollectionItemModel ItemModelList { get; set; }}   给游戏实体创建一个模板 XAML HierarchicalDataTemplate x:Keytemplate_ItemTextBlock Text{Binding ItemName}/ /HierarchicalDataTemplate   给游戏组实体创建一个模板 XAML HierarchicalDataTemplate x:Keytemplate_Group ItemsSource{Binding ItemModelList} ItemTemplate{StaticResource template_Item}StackPanel OrientationHorizontalTextBlock Text{Binding GroupName}/TextBlock Text{Binding GroupCount} Margin5,0,0,0//StackPanel /HierarchicalDataTemplate   但是当我准备给TreeView赋值的时候 , 我想起来TreeView的SelectedItem属性不是依赖属性 , 它不支持Binding操作 所以只有自己写一个控件继承TreeView了。为它扩展一个MySelectedItem属性出来。并且重写SelectedItemChange事件 把TreeView的SelectedItem交给扩展的依赖属性MySelectedItem .这样在界面上就可以Binding选中项了 不过由于TreeView各个节点的数据实体可能类型不相同所以扩展的属性只能定义为object类型   创建自定义树 CS public class MyTreeView : TreeView{public MyTreeView(){}/// summary/// 自定义TreeView选中项,支持数据Binding/// /summarypublic object MySelectItem{get { return GetValue(MySelectItemProperty); }set { SetValue(MySelectItemProperty, value); }}public static DependencyProperty MySelectItemProperty DependencyProperty.Register(MySelectItem, typeof(object), typeof(MyTreeView));/// summary/// 当改变发生时,为自定义的SelectItem属性赋值/// /summary/// param namee/paramprotected override void OnSelectedItemChanged(RoutedPropertyChangedEventArgsobject e){if (this.SelectedItem ! null)this.MySelectItem this.SelectedItem;base.OnSelectedItemChanged(e);}} XAML mc:MyTreeView x:NamemyTree MouseMoveTreeView_MouseMove TextBlock.FontSize14 MySelectItem{Binding SelectGame,ModeTwoWay,UpdateSourceTriggerPropertyChanged} ItemsSource{Binding GroupSourceList} ItemTemplate{StaticResource template_Group} /mc:MyTreeView   CS private TreeViewItem ti new TreeViewItem();private void TreeView_MouseMove(object sender, MouseEventArgs e){if (e.LeftButton MouseButtonState.Pressed){if (myTree.SelectedItem null)return;DragDrop.DoDragDrop(ti, sender, DragDropEffects.Move);}} DragDrop.DoDragDrop方法需要传入一个DependencyObject对象以设置其拖拽时的效果。 但由于TreeView做了数据绑定 所以它的SelectItem取出来是一个数据实体。而不是一个DependencyObject对象了。 所以我用了一个比较SB的办法就是new一个TreeViewItem。然后设置拖拽移动的效果。   创建ListBox ListBox ItemsSource{Binding GameSourceList} AllowDroptrueListBox.ItemTemplateDataTemplateTextBlock Text{Binding ItemName}//DataTemplate/ListBox.ItemTemplatei:Interaction.Triggersi:EventTrigger EventNameDragEnterCommand:EventToCommand Command{Binding DragEnterCommand} PassEventArgsToCommandTrue//i:EventTriggeri:EventTrigger EventNameDragOverCommand:EventToCommand Command{Binding DragEnterCommand} PassEventArgsToCommandTrue//i:EventTriggeri:EventTrigger EventNameDropCommand:EventToCommand Command{Binding DropCommand} PassEventArgsToCommandTrue//i:EventTrigger/i:Interaction.Triggers/ListBox ViewModel  public class MainViewModel : ViewModelBase{public MainViewModel(){Init();}#region Properties/// summary/// 数据源/// /summarypublic ObservableCollectionGroupModel GroupSourceList { get; set; }/// summary/// 数据源/// /summarypublic ObservableCollectionItemModel GameSourceList { get; set; }private object selectGame;/// summary/// 当前选中项/// /summarypublic object SelectGame{get { return selectGame; }set{selectGame value;base.RaisePropertyChanged(SelectGame);}}#endregion#region Methodsprivate void Init(){GameSourceList new ObservableCollectionItemModel();GroupSourceList new ObservableCollectionGroupModel();GroupModel gp1 new GroupModel();#region 模拟数据gp1.GroupName 竞技游戏;gp1.ItemModelList new ObservableCollectionItemModel();gp1.ItemModelList.Add(new ItemModel() { ItemName CS GO });gp1.ItemModelList.Add(new ItemModel() { ItemName 星际争霸2 });gp1.ItemModelList.Add(new ItemModel() { ItemName FIFA 14 });gp1.GroupCount gp1.ItemModelList.Count;GroupModel gp2 new GroupModel();gp2.GroupName 网络游戏;gp2.ItemModelList new ObservableCollectionItemModel();gp2.ItemModelList.Add(new ItemModel() { ItemName CS OnLine });gp2.ItemModelList.Add(new ItemModel() { ItemName 街头篮球 });gp2.ItemModelList.Add(new ItemModel() { ItemName 完美世界 });gp2.GroupCount gp2.ItemModelList.Count;GroupModel gp3 new GroupModel();gp3.GroupName 休闲游戏;gp3.ItemModelList new ObservableCollectionItemModel();gp3.ItemModelList.Add(new ItemModel() { ItemName 德州扑克 });gp3.ItemModelList.Add(new ItemModel() { ItemName 街头篮球 });gp3.ItemModelList.Add(new ItemModel() { ItemName 完美世界 });GroupSourceList.Add(gp1);GroupSourceList.Add(gp2);GroupSourceList.Add(gp3);gp3.GroupCount gp3.ItemModelList.Count;#endregionDragEnterCommand new RelayCommandDragEventArgs(DragEnter);DropCommand new RelayCommandDragEventArgs(Drop);}private void DragEnter(DragEventArgs args){if (SelectGame.GetType() typeof(ItemModel)) //如果拖拽的对象是游戏则接受之{args.Effects DragDropEffects.Move;System.Console.WriteLine(accept);}else{args.Effects DragDropEffects.None; //否则拒绝接受拖拽System.Console.WriteLine(no accept);}args.Handled true;}private void Drop(DragEventArgs args){GameSourceList.Add(SelectGame as ItemModel); //将接受到的游戏写入ListBox}#endregion#region Commandspublic ICommand DragEnterCommand { get; set; }public ICommand DropCommand { get; set; }#endregion} 到这里一个简单的拖拽就完成了。 QQ 3045568793 欢迎交流  posted on 2019-03-15 13:18 NET未来之路 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/lonelyxmas/p/10536423.html
http://www.zqtcl.cn/news/67600/

相关文章:

  • 企业网站建设的经费预算幼儿做爰网站
  • 阿里云虚拟机怎么做多个网站做网站用什么地图好
  • 温州教育网站建设成都it培训机构
  • 建设一个网站需要注意哪些要求软件开发需要什么专业
  • 网站文章排版工具外贸网站导航
  • 网站建设与维护本科教材wordpress 没有注册
  • 宜兴网站建设价格信息学历提升培训机构
  • 网站的图片怎么更换大型广告公司有哪些
  • dede企业网站源码wordpress写文章分段
  • 简单的手机网站模板做影视网站用的封面
  • 新网站推广最直接的方法建筑工程网络副业
  • 网站建设 探索公司怎么在网上推广
  • 建设网站赚的是什么钱怎么查看网站是否降权
  • 单页面个人网站企业建网站的意义
  • 酒店网站建设背景分析保定高端网站建设
  • 苏州行业网站建设access快速开发平台
  • 无锡高端网站建设咨询seo关键词排名教程
  • 网站源码下载了属于侵权吗建网站找哪个公司
  • 深圳营销型网站建设电话涨粉平台
  • 深圳网站设计哪家公司好交友高端网站建设
  • 怎么用ftp修改网站网站托管费
  • 建筑效果图网站有哪些百度软件商店下载安装
  • 房和城乡建设部网站wordpress主题在线制作
  • h5手机网站怎么做虚拟空间应用程序下载
  • 电影网站如何优化百度收录提交接口
  • seo网站排名厂商定制广东智唯网站建设公司
  • 西安建设高端网站郑州做网站设计
  • 营销型网站建设可行性分析高端企业网站建设注意问题
  • 常熟高端网站建设网站免费建站 网页不需要备案
  • pc网站和手机网站wordpress 免费中文模板下载地址