Как да направя Silverlight данни от бутона Commit активиран, когато имам обвързване на данни в текстовото поле от външен ключ и текстът в текстовото поле е редактиран

Използвам SL4, RIA toolkit Spt 2011, SP1. MVVM

Когато моето текстово поле е директно от родителската таблица, при промяна на текста бутонът за ангажиране се активира, но когато текстовото поле е от външния ключ и когато променим има ли бутони за изпращане, все още остава деактивиран.

Прочетете това Бутонът за ангажиране на DataForm не е активиран при промяна на данните което не е подобно на моя проблем.

моята таблица с база данни изглежда така

Customertable (име, IdEmail) и EmailTable(IdEmail, Email)

Формата на данните е като:


Име: _____________

Електронна поща: _____________

  |submit| |Cancel|

Но бутонът за отказ е винаги активен. Искам бутонът за изпращане да е активен, когато имам промени в имейла. ако обаче имам промени в името, бутонът за изпращане се активира и мога също да запазя промените в имейл след това.

Името и имейлът имат двупосочно обвързване с viewmodel.

например изглед модел е като

 private ObservableCollection<Customertable > _customer
public ObservableCollection<Customertable > Customer
{
   get return _customer;
}
  set{
     if(_customer == value) return;
    _customer = value;
    RaisedProtertyChanged("Customer");
}

Полето за имейл в горния „изглед“ е обвързано с „Customer.EmailTable.Email“

Или единственият начин да реша това е да направя свой собствен бутон за изпращане и отказ?


person webKite    schedule 15.11.2011    source източник


Отговори (2)


Без да виждам останалата част от кода ви, правя няколко снимки в тъмното. Предполагам, че започвате редактиране или поставяте формуляра в режим на добавяне на нов, тъй като бутонът ви за отказ е активен? Ако това не е проблемът, най-лесното решение вероятно е ръчно активиране (и деактивиране, ако е необходимо) на бутона за изпращане. Може би ако направите това с VisualTreeHelper, както е предложено в тази нишка във форумите на SL, ще свърши работа ?

person Esoteric Screen Name    schedule 15.11.2011
comment
Благодаря за предложенията, но с нетърпение очаквам да използвам вградения бутон за ангажиране и отмяна за DataForm (CommandButtonsVisibility =commit, cancel) - person webKite; 16.11.2011
comment
@webKite - Моите извинения, очевидно разбирането ми при четене е ужасно. Ще редактирам отговора си, за да бъде нещо, което се надявам да е по-полезно. - person Esoteric Screen Name; 16.11.2011

Стар въпрос за остаряла технология. Идеалното време за отговор: Разширете 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;
      };
  }  
}
person Rkand    schedule 04.01.2017