0

我必须构建一个表单(XAML),该表单将用于在 DB 中创建记录,稍后将通过传递 ID 进行编辑。表单中会有组合框,这些组合框将从 DB 中填充,并且还会有文本框。我不想为 ADD 和 EDIT 复制 XAML 并尝试尽可能多地重用代码。我怎样才能在 MVVM 中实现这一点?我想使用 MVVM 的最佳实践。如果有人可以提供一个统计点,那就太好了。

4

2 回答 2

0

您可以使用 Silverlight Toolkit 中的 DataForm,它提供了不同的编辑模式 - 例如添加、编辑。

这是该方法的概述。您将需要两个视图模型。一个用于数据,另一个用于表单。

// FormViewModel.cs
public class FormViewModel
{
   public Customer DataItem {get; set;}

   // --------- perform action ---------------
   private ICommand _PerformActionCommand = new DelegateCommand(PerformAction);
   public ICommand PerformActionCommand {
      get { return _PerformActionCommand; }
   }

   public void PerformAction()       
   {
      if (Customer.IsNew)
          InsertCustomer(Customer);
      else
          SaveCustomer(Customer);     
   }

   // ------ Button Label --------------
   public string ButtonLabel {
      get {
         return (Customer.IsNew)? "Add": "Update";
      }
   }
}

这是表格:

<UserControl.Resources>
    <local:FormViewModel x:Key="formVM" />
</UserControl.Resources>
<Button 
  Content="{Binding Path=ButtonLabel
                    Source={StaticResource formVM}}"
  Command="{Binding Path=PerformActionCommand, 
                    Source={StaticResource formVM}}" />
于 2012-08-21T22:07:20.323 回答
0

这是一个非常普遍的场景。

您可以创建一个XAML控件/页面,该控件/页面采用特定类型的对象/实例并允许编辑该对象的属性。

Edit的情况下,您传入一个从数据库预填充的对象。

Create的情况下,您传入该类型的新实例。

调用者/主机会知道传递给编辑控件的对象类型。

因此,当该对象通过编辑控件返回时,调用者/主机可以处理向数据库添加/更新。

于 2012-08-11T18:40:38.097 回答