2011-01-06 13 views
1

Silverlightのデータフォームのコミットおよびキャンセルボタンに問題があります。 最初に、ユーザーが編集をクリックしたときにキャンセルボタンが有効になっていない理由を理解できませんでした。いくつかの研究の後、私はこれがオブジェクトがIEditableObjectではないことが原因であることを発見しました。これでキャンセルボタンがソートされましたが、値が変更された後でさえ、コミットボタンが有効になることが決まりました。Dataformサブミットおよびキャンセルボタン

私の質問は、どうすれば有効になるのですか?

XAML:

<dataFormToolkit:DataForm CurrentItem="{Binding ViewModel, ElementName=AccountPage, Mode=TwoWay}" CommandButtonsVisibility="{Binding ViewModel.CommandButtonsVisibility, ElementName=AccountPage, Mode=TwoWay}" AutoEdit="False" AutoGenerateFields="False" AutoCommit="False"> 
     <dataFormToolkit:DataForm.EditTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <dataFormToolkit:DataField Label="Organisation Name"> 
         <TextBox Text="{Binding Customer.Name, Mode=TwoWay}"/> 
        </dataFormToolkit:DataField> 
       </StackPanel> 
      </DataTemplate> 
     </dataFormToolkit:DataForm.EditTemplate> 
    </dataFormToolkit:DataForm> 

XAML.cs:

public partial class Account : Page 
{ 
    public VMAccount ViewModel { get; set; } 

    public Account() 
    { 
     InitializeComponent(); 
    } 

    // Executes when the user navigates to this page. 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     ViewModel = new VMAccount(Global.Client.CurrentPerson.Customer); 
    } 

} 

VMAccount:

public class VMAccount : VMBase, IEditableObject 
{ 
    public VMAccount(Customer customer) 
    { 
     Customer = customer; 
    } 

    private Customer m_oCustomer; 
    public Customer Customer 
    { 
     get { return m_oCustomer; } 
     set 
     { 
      if (m_oCustomer != value) 
      { 
       m_oCustomer = value; 
       OnPropertyChanged("Customer"); 
      } 
     } 
    } 

    public event EventHandler<AsyncResultArgs> SaveCustomerSuccess; 
    public event EventHandler<AsyncResultArgs> SaveCustomerFailure; 

    #region IEditableObject Members 

    public void BeginEdit() 
    { 
     Customer.PropertyChanged += new PropertyChangedEventHandler(OnCustomerPropertyChanged); 
     Customer.ContactInfo.PropertyChanged += new PropertyChangedEventHandler(OnCustomerPropertyChanged); 
    } 

    public void CancelEdit() 
    { 
     (Customer as IRevertibleChangeTracking).RejectChanges(); 
     (Customer.ContactInfo as IRevertibleChangeTracking).RejectChanges(); 
    } 

    public void EndEdit() 
    { 
     if (Customer.HasChanges) 
     { 
      Global.Client.MainContext.SubmitChanges((lo) => 
      { 
       HandleResult("Save Customer", lo, true, SaveCustomerSuccess, SaveCustomerFailure); 
      }, null); 
     } 
    } 

    #endregion 

    private void OnCustomerPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     OnPropertyChanged("Customer"); 
    } 
} 

VMBase:

public class VMBase : INotifyPropertyChanged 
{ 
    protected virtual void OnPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 
} 

私は 'OnCustomerPropertyChanged'イベントハンドラを配置して、Customerformプロパティが変更されたacknoledgeにデータフォームを強制的に適用できるかどうかを確認しますが、イベントが発生しても差は生じません。 IEditableObjectを削除して、これが問題であることを確認しました。

public class VMAccount : VMBase//, IEditableObject 
... 

ありがとうございました。

編集:私はその顧客を追加する必要がありますが、RIAエンティティ

答えて

0

あるので、それは私がRIAツールキットのSP1がリリースされるまで行うことができないネストされたオブジェクトを編集しようとしていたが判明しました。ありがとう。

0

あなたの問題は、質問Silverlight 3 Dataform Commit Button not activating

で類似してくださいすることができ、私はSilverlightの4とRIAのserivcesを使用して同じisueを持っていたthis response

を改訂。

私は、WCF RIA サービスService Pack 1および WCF RIA ServicesのSP1の再インストールWCF RIA Servicesの Toolkitをインストールする解決。 WCF RIA ServicesのSP 1へ http://www.silverlight.net/getstarted/riaservices/

直接リンク: http://go.microsoft.com/fwlink/?LinkId=205085 WCF RIA ServicesのSP1用WCF RIA Servicesの ツールキットへの直接リンク: http://go.microsoft.com/fwlink/?LinkID=205088

この2つのインストーラはで見つけることができます

関連する問題