zoukankan      html  css  js  c++  java
  • WPF+Caliburn.Micro 杂记

    开发过程中的小问题总结

    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之类的就会异常了。

  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/lijin/p/3422001.html
Copyright © 2011-2022 走看看