2011-11-15 34 views
1

我正在使用SL4,RIA工具包Spt 2011 SP1。 MVVM當我從外鍵和文本框中的文本編輯數據綁定時如何啓用Silverlight數據從提交按鈕啓用

當我的文本框直接來自父表,當文本發生改變時,提交按鈕被啓用,但是當文本框來自外鍵,並且當我們改變時,提交按鈕仍然被禁用。

看過這個DataForm commit button is not enabled when data changed這與我的問題不相似。

我的數據庫表查找喜歡

CustomerTable的(名字,IdEmail)和EmailTable(IdEmail,電子郵件)

數據形象:


名稱:_____________

電子郵件:_____________

|submit| |Cancel| 

但取消按鈕始終處於活動狀態。當我對電子郵件進行一些更改時,我希望提交按鈕處於活動狀態。然而,如果我的名字有變化,提交按鈕被啓用,我也可以保存更改後的電子郵件。

名稱和電子郵件都有與視圖模型綁定的兩種方式。

例如視圖模型就像上面的「視圖」

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

電子郵件字段被綁定到「Customer.EmailTable.Email」

或者只是爲了解決這是爲了讓我自己的路自定義提交和取消按鈕?

回答

0

沒有看到你的代碼的其餘部分,我在黑暗中拍了幾張照片。我假設你正在開始編輯或將表單置於新增模式,因爲取消按鈕處於活動狀態?如果這不是問題,最簡單的解決方法可能是手動啓用(如果需要,則禁用)提交按鈕。也許這樣做與VisualTreeHelper,如this SL forums thread建議會做的伎倆?

+0

感謝您的建議,但我很期待使用內置的提交和的DataForm取消按鈕(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; 
     }; 
    } 
} 
相關問題