1

我正在使用 SL4、RIA 工具包 Spt 2011、SP1。MVVM

当我的文本框直接来自父表时,在文本更改时,提交按钮被启用,但是当文本框来自外键并且我们更改时,提交按钮仍然保持禁用状态。

已阅读此DataForm 提交按钮在数据更改时未启用,这与我的问题不同。

我的数据库表看起来像

Customertable (name, IdEmail) 和 EmailTable(IdEmail, Email)

数据形式是这样的:


姓名: _____________

电子邮件: _____________

  |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”

或者解决这个问题的唯一方法是制作我自己的自定义提交和取消按钮?

4

2 回答 2

0

在没有看到您的其余代码的情况下,我在黑暗中拍摄了几张照片。我假设您正在开始编辑或将表单置于添加新模式,因为您的取消按钮处于活动状态?如果这不是问题,最简单的解决方法可能是手动启用(并在需要时禁用)提交按钮。也许使用 VisualTreeHelper 这样做,正如这个 SL 论坛帖子中所建议的那样可以做到这一点?

于 2011-11-15T22:26:42.317 回答
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;
      };
  }  
}
于 2017-01-04T20:28:20.297 回答