开发过程中的小问题总结

1DataGrid的Header里面给Checkbox绑定IsEnabled,绑不上去. 

2由A页面跳转到B页面,再由B页面返回一个值

3DataGrid里面的行通过一个方法将DataGrid对象作为一个参数传递

4DataGrid结束行编辑数据不能及时更新

5窗体在屏幕的最前面

6弹出窗口抢焦点

7DataGrid双击编辑,获取数据验证

1DataGrid的Header里面给Checkbox绑定IsEnabled,绑不上去. 

原因:在DataGrid直接{Binding Enabled}这么写,CM默认是去找DataGrid,所以找不到,改成

IsEnabled="{Binding DataContext.Enabled,RelativeSource={RelativeSource AncestorType={x:Type Window}},Mode=TwoWay}"

指向WIndow就可以找到了

<DataGridTemplateColumn.Header>
<CheckBox cal:Action.Target="{Binding ElementName=List}"
IsEnabled="{Binding Enabled}"  绑定IsEnabled
cal:Message.Attach="[Event Checked]=[Action SelectAll];[Event Unchecked]=[Action UnselectAll]"/>
</DataGridTemplateColumn.Header>

2由A页面跳转到B页面,再由B页面返回一个值

解决方法:可以定义一个事件

A页面

public void Search()
{
WindowManager window = new WindowManager();
BViewModel search = new BViewModel(itle, false);
search.Get += new EventHandler(SearchGuid);//注册事件
window.ShowDialog(search);//打开窗体
}

private void SearchGuid(object sender, EventArgs e)
{
得到传过来的值 = ((B) sender).Strmodule;
}

B页面

public void 触发这个事件()
{
if (GetDepartGuid != null)
{
Get(this, EventArgs.Empty);
}
}
}

定义事件

public event EventHandler Get;

3DataGrid里面的行通过一个方法将DataGrid对象作为一个参数传递

<DataTemplate>
<TextBox Width="100" Text="{Binding Num,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
cal:Message.Attach="[Event LostFocus]=[Action TextLostFocus($this.Tag)]"></TextBox>
</DataTemplate>

找到上一级的DataGrid

4DataGrid结束行编辑数据不能及时更新

原因是当鼠标离开编辑才文本框以后,这行没结束编辑,需要人为的结束编辑

System.Windows.Controls.DataGrid dataGrids = dr as System.Windows.Controls.DataGrid;
dataGrids.CommitEdit(DataGridEditingUnit.Row, true);

5窗体在屏幕的最前面

Topmost="True"

6弹出窗口抢焦点

比如你正在输入东西,突然弹出一个窗口,你的光标就没了

AllowsTransparency="True"

7DataGrid双击编辑,获取数据验证

最开始做的时候走了个弯路,用了个模板,里面放了个TextBox,倒是实现了双击一列处于编辑状态,得到TextBox里面的值,并可以控制其能否修改,验证。后来发现走太2了。我们都知道DataGrid自带行编辑,然后你用CellEditEnding这个事件,把他的参数e转成TextBox就可以得到值了,然后去验证。不过得记得在将EditingElement转成TextBox之前得判断一下他是不是TextBox,不然有的时候你的其他字段里面放的是Combox之类的就会异常了。

WPF+Caliburn.Micro 杂记的更多相关文章

  1. [WPF] Caliburn Micro学习三 Binding

    Caliburn Micro学习一 Installation Caliburn Micro学习二 Infrastructure 如果说WPF推崇的Binding开辟了一条UI开发新的方式——让写代码的 ...

  2. [WPF] Caliburn Micro学习二 Infrastructure

    Caliburn Micro学习一 Installation http://blog.csdn.net/alvachien/article/details/12985415 Step 1. 无论是通过 ...

  3. [WPF] Caliburn Micro学习一 Installation

    在之前的文章(http://blog.csdn.net/alvachien/article/details/5670838)里面,已经提到过MVC和MVVM在Design Pattern上的比较. 首 ...

  4. WPF + Caliburn.Micro +ActionMessage事件绑定

    ActionMessage事件绑定是个人觉的算是CM的精髓了,比如说我在View里面放个button,我们要在他的click事件里面写东西,怎么写.如果是WPF我们直接在CS里面写就可以.但是CM不行 ...

  5. WPF Caliburn.Micro ListView 批量删除 新方法.高效的

    上一片我做的批量删除,是更具ListView的选项改变事件,然后放到一个全局变量里面,缺点已经说了.这次又找到一个好的方法.和大家分享一下.这次我将删除按钮的click事件里面的参数绑定为ListVi ...

  6. WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下

    做这种批量删除的时候我的想法是获取每行的ID,然后更具ID删除,看过一些博客,大部分都是直接写在.CS文件里面,将ListView和CheckBox关联起来,最后用checkbox ck=sender ...

  7. WPF +MVVM(Caliburn.Micro)项目框架

    最近做了一个软件,这个软件不是网站,但是与HTML,AJAX等技术密切相关,也不是只有单纯的数据库增删改查,还涉及到线程协调,比较复杂的文本处理…… 这样的软件,用OA,ERP的框架显然是不合适的,因 ...

  8. WPF 使用Caliburn.Micro 多线程打开窗口

    我们都知道在WPF里面用多线程打开一个窗口很简单.如下 public void ClickMe(object sender) { Thread newWindowThread = new Thread ...

  9. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...

随机推荐

  1. 【转载】给VM虚拟机增加硬盘容量

    转载自:http://www.douban.com/note/53678368/ vmware-vdiskmanager [选项]这里的选项你必须包含以下的一些选择项或参数选项和参数描述<dis ...

  2. 任督二脉之Shell中的正则表达式

    VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...

  3. 标志数在wordcount程序中的应用与拓展

    wordcount程序要求测出文本中的单词数,字符数和行数. 设计思路: 将文件读入,逐字检测,检测到空格单词数加一,检测到回车行数单词数加一,如果既不是回车也不是空格则说明是字符,字符数加一 编程时 ...

  4. Hya.io – 基于 Web 的数字音频工作站

    Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 ...

  5. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  6. js-异常处理语句

    程序运行过程中难免会出错,出错后的运行结果往往是不正确的,因此运行时出错的程序通常被强制中止.运行时的错误统称为异常,为了能在错误发生时得到一个处理的机会,JavaScript提供了异常处理语句.包含 ...

  7. BZOJ1087状压DP 解题报告

    1087: [SCOI2005]互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的 ...

  8. 使用RazorEngine对ASP.NET MVC的Views进行UnitTest

    有的时候我们需要对Razor最后生产的文本(HTML OR XML OR..)进行单元测试. 使用Nuget安装RazorEngine. 新建一个ASP.NET MVC项目,并且带有测试项目. 修改I ...

  9. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  10. Android中的消息通知(NotificationManager和Notification)

    下面来谈谈notification,这个notification一般用在电话,短 信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这 ...