我正在使用SL4,RIA工具包Spt 2011,SP1。 MVVM
当我的文本框直接来自父表时,在更改文本时,提交按钮被启用但当文本框来自外键时,当我们更改时,提交按钮仍然保持禁用状态。
已阅读此DataForm commit button is not enabled when data changed,这与我的问题不相似。
我的数据库表看起来像
Customertable(name,IdEmail)和EmailTable(IdEmail,Email)
Dataform就像:
姓名:_____________
电子邮件:_____________
|submit| |Cancel|
但是取消按钮始终处于活动状态。我希望提交按钮在电子邮件中有一些变化时才能激活。但是,如果我在名称上有更改,则提交按钮会启用,之后我也可以保存电子邮件中的更改。
Name和email都与viewmodel绑定了两种方式。
例如视图模型就像
private ObservableCollection<Customertable > _customer
public ObservableCollection<Customertable > Customer
{
get return _customer;
}
set{
if(_customer == value) return;
_customer = value;
RaisedProtertyChanged("Customer");
}
上面“视图”中的电子邮件字段绑定到“Customer.EmailTable.Email”
或者解决这个问题的唯一方法是制作我自己的自定义提交和取消按钮?
答案 0 :(得分:0)
在没有看到你的其余代码的情况下,我在黑暗中拍摄了几张照片。我假设您正在开始编辑或将表单置于添加新模式,因为您的取消按钮处于活动状态?如果这不是问题,最简单的修复可能是手动启用(并在需要时禁用)提交按钮。也许正如this SL forums thread中所建议的那样使用VisualTreeHelper这样做可以解决问题吗?
答案 1 :(得分:0)
过时技术的老问题。完美的回答时间: 扩展Dataform,以便始终启用命令按钮。
public class CustomDataForm : DataForm
{
private Button _commitButton;
protected override void OnContentLoaded(DataFormContentLoadEventArgs e)
{
base.OnContentLoaded(e);
var dependencyObject = VisualTreeHelper.GetChild(this, 0) as Grid;
_commitButton = dependencyObject?.FindName("CommitButton") as Button;
if (_commitButton == null) return;
_commitButton.IsEnabled = true;
_commitButton.IsEnabledChanged += (s, e1) =>
{
if (!(bool) e1.NewValue)
_commitButton.IsEnabled = true;
};
}
}