2011-11-15 3 views
1

私はSL4、RIAツールキットSpt 2011 SP1を使用しています。 MVVM外部キーからテキストボックスにデータをバインドし、テキストボックスのテキストを編集すると、Silverlightデータからコミットボタンを有効にする方法

私のテキストボックスが直接親テーブルからのものである場合、テキストの変更時にコミットボタンが有効になりますが、テキストボックスが外部キーからのもので、変更があっても送信ボタンは無効のままです。

これは私の問題に似ていないDataForm commit button is not enabled when data changedをお読みください。


名:_____________

私のデータベーステーブルルックは

Customertable(名前、IdEmail)とEmailTable(IdEmail、電子メール)

、データフォームが似ているが好き

メールアドレス:_____________

|submit| |Cancel| 

しかし、キャンセルボタンは常にアクティブです。私は電子メールにいくつかの変更があったときに、送信ボタンをアクティブにしたい。しかし、私は名前の変更がある場合は、送信ボタンが有効になると私はまた、その後の電子メールに変更を保存することができます。

名前とメールの両方には、viewmodelとの双方向バインディングがあります。例えば、ビューモデルの

は「Customer.EmailTable.Email」

にバインドされ、前述の「ビュー」で

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

メールフィールドのようなものですか、これは私自身のようにすることです解決する唯一の方法でありますカスタム送信とキャンセルボタン?

答えて

0

コードの残りの部分を見ずに、私は暗闇の中でカップルを撮影しています。キャンセルボタンが有効なので、編集を開始したり、フォームを新しいモードに追加したりしていると思いますか?これが問題ではない場合、最も簡単な修正はおそらく、送信ボタンを手動で有効にして(必要に応じて無効にする)ことです。 this SL forums threadで示唆されているように、おそらくVisualTreeHelperでこれを行うのは、このトリックですか?

+0

の提案をありがとう、私は使用することを楽しみにしていますコミットやキャンセルデータフォームのためのボタンを(CommandButtonsVisibilityは=「コミットキャンセル」) – webKite

+0

@webKite内蔵 - 私の謝罪、どうやら私の読解力がひどいです。うまくいけば助けになるように私の答えを編集します。 –

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; 
     }; 
    } 
} 
関連する問題