首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【我们一起写框架】MVVM的WPF框架之序篇(一)

框架的前期准备 框架是要一步一步编写的,首先,我们先定义框架包含的基本元素。基本元素如下: ? WPFUI:就是WPF的Xaml页面。...(任何框架都有约定,而且约定要高于配置,这是约定优先原则。) 我们建立约定如下: WPF项目窗体以Window作为前缀名创建,如WindowMain,WindowLogin。...接下来需要编写的是Page和UserControl的基础使用方式。...但Page和UserControl是被Window使用的,不能直接呈现,所以,在使用Page和UserControl之前,我们需要编写MVVM框架中,用于在WPF页面和ViewModel传递信息的Command...本篇文章就先不介绍Command了,敬请期待下一篇文章,让我们一起继续完善我们的框架。 框架代码已经传到Github上了,并且会持续更新。

2.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    简单实现DataGrid使用CheckBox选择行

    以前写过几个方法实现这个功能,但最终还是选择了不继承DataGrid,所以再重新发布出来。 先显示最终结果,其中左边是错误的例子,右边才是正确的 ?...在DataGrid中使用CheckBox选择行时典型的错误就是CheckBox没有Binding到任何属性上,这样的话当拖动滚动条时CheckBox.IsChecked就会乱掉,如Demo中左边那个DataGrid...最终的实现方法是自定义一个包含DataGrid的DataGridTemplateColumn,而不需要重写DataGrid,这样的坏处就是每次调用需要多写一局代码,如果不想这样就继承DataGrid然后把这句代码写进去...创建一个UserControl然后把它改成DataGridTemplateColumn,这样好处是DataTemplate和Style中的FrameworkElement都可以轻松地获取。...];         }     } 其中MarkObject是一个继承INotifyPropertyChanged的类,包含Selected属性,这样更改IsSelected时可以更新UI。

    89530

    在VisualStudio中提供运行时和设计时支持的WPF本地化解决方案

    这意味着我们可以使用扩展的强类型资源发生器[^]在Visual Studio 2005和2008,或附带的PublicResXFileCodeGenerator工具Visual Studio 2008。...如果有绑定错误,那么绑定中的路径集不匹配任何RESX文件中的任何字符串,而且它甚至不能像以前那样返回默认的RESX值。 添加更多区域设置 ?...如果字符串参数不匹配任何已定义的CultureInfo类型,CultureInfo.GetCultureInfo()方法将会失败。...不幸的是,当您加载包含UserControl的窗口时,它将无法展示出来。(这似乎只是Blend工具的一个问题,在这种情况下,Visual Studio 2008设计器能够正常展示。)...添加到设计器本身,以便在初始化UserControl时可以使用它们。

    2K20

    温故而知新:WinFormSilverlight多线程编程中如何更新UI控件的值

    究其原因,winform中的UI控件不是线程安全的,如果可以随意在任何线程中改变其值,你创建一个线程,我创建一个线程,大家都来抢着更改"TextBox1"的值,没有任何秩序的话,天下大乱......void DelegateSetValue(object obj)          { this.textBox1.Text = obj.ToString();         }     }...} 3.利用SynchronizationContext上下文 -- 最神秘的方法(Winform/Silverlight能用) 之所以说它神秘,是因为msdn官方对它的解释据说也是不清不楚 using...void SetTextValue(object obj)          { this.textBox1.Text = obj.ToString();         }     } public...System.Windows.Controls; using System.Windows.Input; namespace ThreadTest { public partial class MainPage : UserControl

    1.8K50

    c#中开发ActiveX的学习笔记

    8 {   9     [Guid("8d7d8518-ca58-4863-b94d-3c616fda7b35")]  10 public partial class MyActiveX : UserControl...基本上这样弄完后,就可以在网页中,用类似下面这样的代码来本机调用了: 注意:c#定义的public方法,如果想直接让js调用,只能返回string,DateTime,int,double这一类基本值类型...前面已经提到了,c#开发的(伪)"ActiveX"控件并非纯正的ocx,所以只能用RegAsm.Exe xxx.dll来进行程序集的注册,这里要注意一点:在开发机上,项目编译后vs.net会自动将bin\debug...注意:"主输出来自xxx"的属性栏中,有一个"Register"必须选择"vsdrpCOM" 另外还有一个问题,可能是我机器的个别现象,每次activex项目有修改时,建议最好手动清除安装项目debug...目录下的文件,再重新生成安装项目,否则有时候会发现activex修改了,但是安装包中包含的dll还是未修改过的版本。

    1.5K50

    Unity3d热更新之xLua热更新

    其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。...print("变长参数")print(a)arg={...}for k,v in pairs(arg) doprint(k,v)endendC#映射到Lua列表和字典映射列表映射Lua简述:List可以包含指定类型的元素...(obj.testBool);Debug.Log(obj.testFloat);Debug.Log(obj.testString);//执行函数obj.testFun();这里我们可以通过以下的截图看出结果当我们注释掉...(obj.testBool);//Debug.Log(obj.testFloat);Debug.Log(obj.testFloatTwo);Debug.Log(obj.testString);//执行函数...);//Debug.Log(obj.testFloat);Debug.Log(obj.testString);Debug.Log(obj.i);Debug.Log("嵌套:" + obj.testInClass.testInInt

    3K31

    WPF:无法对元素“XXX”设置 Name 特性值“YYY”。“XXX”在元素“ZZZ”的范围内,在另一范围内定义它时,已注册了名称。

    这里的 XXX 是元素的类型,YYY 是指定的名称的值,ZZZ 是父容器的名称。...实际上,这是一个用户控件,也就是继承自 UserControl 的大家通常用来写界面的东西。...-- 省略 --> UserControl.Style> UserControl> 别问我为什么会有以上这样诡异的代码。我也不知道,这只是偶然发现的代码,我简化后拿到博客中。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布...如有任何疑问,请 与我联系 (walter.lv@qq.com) 。

    3.1K20

    PS常用命令之脚本编程常用命令

    #1.Write-Host示例 PS > Write-Host "Input" Input PS > Write-Host "no newline test " -NoNewline #写到控制台不增加新线...#首次执行没有任何输出这和$DebugPreference配置有关, #因为$DebugPreference的默认值为:SilentlyContinue。...补充输出: $host.UI.WriteDebugLine("Debug") #调试: Debug $host.UI.WriteErrorLine("Error") #Error $host.UI.WriteVerboseLine...dir > $null 对象属性和方法 New-Object 描述:.Net类型中的方法功能很强大。可以通过类型的构造函数创建新的对象,也可以将已存在的对象转换成指定的类型。...通过New-Object创建新对象,使用构造函数创建一个指定类型的实例对象,该类型必须至少包含一个签名相匹配的构造函数; #1.例如.可以通过字符和数字创建一个包含指定个数字符的字符串 PS > New-Object

    1.5K10

    git .gitignore 忽略规则的匹配语法

    bin 文件 /bin: 忽略根目录下的 bin 文件 /*.c: 忽略 cat.c,不忽略 build/cat.c debug/*.obj: 忽略debug.../io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj **/foo: 忽略/foo, a/foo, a/b/foo等 a/**/b:...;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录; 5)以星号 "*" 通配多个字符,即匹配多个任意字符...通配单个字符,即匹配一个任意字符; 7)以方括号“ [] ”包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。...表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)

    7.8K11

    VsxHowTo -- 把Windows Forms Designer作为自己的编辑器(2)

    toolbox里拖入一个控件时,如果想让控件自动命名,我们需要往DesignerHost里加一个INameCreationService的服务,我没有研究过为什么BasicDesignerLoader不默认帮我们加上...serializer.CreateStore(); using (store) { foreach (object obj...in objects) { serializer.Serialize(store, obj);...保存文档,无非就是把DesignerHost中正在设计的UserControl以及它的子控件用某种方式序列化到文件里,而加载文档则相反:读取文件,并反序列化成控件,并把控件加到DesignerHost里...我们需要把文件的路径传给DocumentData,并且在DocumentData里定义一个Control类型的属性: class DocumentData : IVsPersistDocData, IPersistFileFormat

    41920

    彻底搞懂之C++智能指针

    前言 在现代 c + + 编程中,标准库包含 智能指针,这些指针用于帮助确保程序不会出现内存和资源泄漏,并具有异常安全。...我简单的总结下就是:将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),并在析构函数里编写delete语句删除指针指向的内存空间。...它不能复制到另一个 unique_ptr函数,由值传递给函数,或在任何需要复制副本的 C++ 标准库算法中使用。 只能移动 unique_ptr。...最佳设计是避免在任何时候都能实现指针的共享所有权。 但是,如果您必须有实例的 shared_ptr 共享所有权,请避免它们之间存在循环引用。...这样的情况包括: 有一个指针数组,并使用一些辅助指针来标示特定的元素,如最大的元素和最小的元素; 两个对象包含都指向第三个对象的指针; STL容器包含指针。

    3.9K10
    领券