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

 

转载于:https://www.cnblogs.com/lijin/p/3422001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值